참고
- 파이썬의 경우 타입에 약한 언어이므로 감지할 수 없는 버그가 발생하기 쉽고 언어 자체의 기능이 많기때문에 자주 사용되는 데이터 구조인 튜플, 딕셔너리만 다룬다.
- 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() |