참고

  • 파이썬의 경우 타입에 약한 언어이므로 감지할 수 없는 버그가 발생하기 쉽고 언어 자체의 기능이 많기때문에 자주 사용되는 데이터 구조인 튜플, 딕셔너리만 다룬다.
  • tuple, dict 는 Top down 동적 계획법의 memo 기능에 주로 사용한다.

ArrayList

일반 배열 int[]은 자동 확장 축소지원이 없기 때문에 표준 라이브러리로 캡슐화된 배열을 사용한다.


요소 C++ Java Python
선언 string s = "hello"; String s = "hello"; s = "hello"
길이반환 s.size(); s.length(); len(s)
null여부 s.empty(); s.isEmpty(); if s:
끝에 문자삽입 s.push_back('w'); char[] c = s1.toCharArray(); s += 'w'
끝에 문자삽입 s += "orld"; s += "orld"; s += 'orld'
문자열 반환 s[1]; char c = s.charAt(1); s[1]
문자열 반환(시작,길이) substr(pos, len) s.substring(pos, len) s[pos:len]
문자열 비교 s1 == s2 s1.equals(s2); s1 == s2

문자열

자바의 경우 []을 사용해 직접 문자에 엑세스 할 수 없으므로 문자열 처리가 불편하다.
또한 직접 수정이 불가능하여 toCharArray를 이용해 char[]타입변환후 수정한다.
자바의 경우 문자열 병합을 자주 사용한다면 StringBuilder를 사용한다.


요소 C++ Java Python
배열 초기화 vector dp(n); ArrayList dp = new ArrayList(); LinkedList link = new LinkedList(); dp = [1,2,3,4]
2차원 배열 초기화 vector<vector> dp(m, vector(n, 0)); List<List> listOfLists = newArrayList<List>(size); dp = [[0 for x in range(w)] for y in range(h)]
null판단 dp.empty(); dp.isEmpty(); if dp:
요소개수 dp.size(); dp.size(); len(dp)
인덱스반환 dp.get(1); dp.get(1); dp[1]
배열끝 요소반환 dp.back(); "dp.get(dp.size()-1); link.getLast();" dp[-1]
배열끝 요소추가 dp.push_back(1); dp.add(1); dp.append(1)
배열끝 요소삭제 dp.pop_back(); "dp.remove(dp.size()-1); link.removeLast();" dp.remove(-1)

HashTable

해시 테이블 데이터는 어떤 자료형이라도 사용가능하지만 Key는 보통 int형과 string형을 사용한다.


요소 C++ Java Python
초기화 unordered_map<int, int> map; HashMap<Integer, Integer> map = new HashMap(); map = {}
string, int 초기화 unordered_map<string, vector> map; HashMap<String, int[]> map = new HashMap(); map = {}
키 존재 여부 map.count(key); map.containsKey(key); key in map
요소반환 map[key]; map.get(key); dp.get(key)
키 삽입 map[key] = 1; map.put(key,value); map[key] = 1
키,값 제거 map.erase(key); map.remove(key); map.pop(key)
요소 C++ Java Python

HashSet


요소 C++ Java Python
초기화 unordered_set set; Set set = new HashSet<>(); set = set()
키 삽입 set.insert(0); set.add(key); set.add(2)
키,값 제거 set.erase(0); set.remove(key); set.remove(key)

Queue

C++의 경우 pop메서드는 void타입이라 삭제된 요소를 반환하지 않음에 주의한다.
자바의 경우 인터페이스를 사용하므로 초기화방법에 주의한다.


요소 C++ Java Python
초기화 queue q; Queue q = new LinkedList<>(); q = Queue()
요소추가 q.push(val); q.add(val); or q.offer(val); q.put(val)
요소반환 q.front(); q.peek(); q.get()
요소삭제 q.pop(); q.poll(); or q.remove(); q.pop(0)
요소 C++ Java Python

Stack


요소 C++ Java Python
초기화 stack s; Stack s = new Stack<>(); s = []
요소추가 s.push(val); s.push(val); s.append(val)
요소반환 s.top(); s.peek(); s[-1]
요소제거 s.pop(); s.pop(); s.pop()