티스토리 뷰
.입출력
.한 줄에 입력받는 경우
- map 자료형 사용
1 | N, lst = input(), list(map(int, input().split())) | cs |
--
.입력과 동시에 반복문에 적용
-
1 2 | for i in list(map(int, input().split())): print(i) | cs |
-
.모듈러 방식 적용
- find() 또는 index() 사용
1 | ML, MR, TL, TR = ["RSP".find(i) for i in input().split()] | cs |
.2차원 배열 입력
-
1 | grd = [[0 for i in range(M + 2)] for j in range(N + 2)] | cs |
-
//
.간격있게 출력
--
1 2 | for i in B: print(i, end = ' ') | cs |
--
.format 형식에 맞게 출력
--
1 | print("{}%".format(res[0] % 10 * 10 + res[1] % 10)) | cs |
--
.반복문
.enumerate()
- idx와 원소를 같이 반환
1 2 | for idx, res in enumerate(S): print(idx, res) | cs |
--
.max(), min()과 반복분
1 | print(max(money() for i in range(N))) | cs |
--
--
.자료형
.리스트 이해
1. container 의 역할
ㅇ 자료형에 따른 본인만의 container 설정과 이해
- Tuple : 위치(idx)에 따른 의미
- Set : 포함 여부 의미
- List : idx와 원소의 관계
- Dic : key와 value의 관계
ㅇ 함수와 마찬가지로 주석으로 적절한 역할을 명시하는게 중요
2. container 의 분할
.List Comprehension 표현법
-
1 | res = [alpa[ord(i) - ord('A')] for i in AB] | cs |
-
.Dictionary Comprehension 표현법
-
1 | A = {i: 1 for i in map(int, input().split())} | cs |
-
.Dictionary get
- dictionary A에 i가 없을 경우 0 출력
1 | print(A.get(i, 0)) | cs |
-
.Dictionary KEY : VALUE(list) 구조
-
1 2 3 4 5 6 7 8 9 | # dictionary 생성 team_mem = {} # dictionay 의 key를 추가하고 value 는 list로 초기화 team_mem[teamName] = [] # dictionary 의 특정 key에 value(list) append for i in range(N): team_mem[teamName].append(memName) | cs |
.전역변수 사용
-
1 | global grd, ck | cs |
.탐색
.방향벡터
1. delta X, Y
2. tuple
1 2 3 4 5 6 7 8 9 | dx, dy = [0, -1, 0, 1], [1, 0, -1, 0] # index 활용 (find도 가능) x += dx['ENSW'.index(way)] y += dy['ENSW'.index(way)] # DFS for i in range(4): dfs(x+dx[i], y+dy[i]) | cs |
.좌표
* 0~N*N-1 까지의 번호가 부여된 좌표 idx로 (X, Y) 구하는 방법
1 2 3 | for pos in lst: x = pos // N y = pos % N | cs |
.재귀함수 깊이 제한
* python에서 DFS 사용 시 재귀함수 깊이 제한이 필요
1 2 | import sys sys.setrecursionlimit(10000) | cs |
.Board Rotation
* 방향은 다르지만 동작은 같을 경우, Board만 돌려주면서 구현
1 2 3 4 5 6 | def Rotate(N, Board): newBoard = deepcopy(Board) for i in range(N): for j in range(N): newBoard[j][N-i-1] = Board[i][j] return newBoard | cs |
.일차원배열 누적합
1 | DP[j] - DP[i-1] | cs |
.이차원배열 누적합
1 2 3 4 5 | # 이차원 배열의 (1,1)부터 (i,j)까지의 누적합 구하기 DP[i][j] = DP[i-1][j] + DP[i][j-1] - DP[i-1][j-1] + A[i-1][j-1] # (i,j)부터 (x,y)까지의 부분합 구하기 DP[x][y] - DP[x][j-1] - DP[i-1][y] + DP[i-1][j-1] | cs |
.변수
.deepcopy
1. 변수의 내용만 복사(주소는 복사하지 않음)
- BoardCopy = Board 로 복사를 해주면 주소값이 복사되어 원본도 같이 변경되어버림
1 2 3 | from copy import deepcopy BoardCopy = deepcopy(Board) | cs |
.함수
.함수 이해
1. 함수의 이름과 역할
ㅇ 함수명은 확실하게
1 2 3 4 5 6 7 8 9 10 11 | # Snake Case def money_sum(N, money_arr): pass # Camel Case def moneySum(N, moneyArr): pass # Pascal Case def MoneySum(N, MoneyArr): pass | cs |
ㅇ 기능별로 나누기
- init(), process(), output()
- 코딩 테스트에서는 굳이 필요 없지만 너무 deep 해지면 기능별로 나눠주는게 좋음
ㅇ 자신만의 스타일을 유지하며 일관된 코드를 만들기
ㅇ 반환 값과 매개변수 미리 정하기
1 2 3 4 | def moneySum(N, moneyArr): ret = 0 return ret | cs |
2. 함수의 매개변수
ㅇ 함수의 매개변수는 매우 중요
ㅇ 복잡한 내용은 주석으로 함수와 매개변수의 역할 정리
ㅇ 필요한 변수와, 편한 변수를 넘기기
.기타
.논리 연산자 / 비트 연산자 활용
1. 논리 연산자
ㅇ 조건문이 깊어지지 않도록 논리 연산자를 잘 활용(4개 이하의 조건)
- 4개가 넘어가는 조건은 분리해주는 것이 좋음
- and, or, not
2. 비트 연산자
ㅇ 자주 나오지는 않지만 사용되는 경우가 종종 있음
- <<, &, |, ^
.상태를 나타내는 자료 활용
1. bool, array, set, dictionary 등 자료형을 활용하여 상태를 체크
.나눠서 진행
1. 반복문이 깊어지는 경우 조건 판별 함수(사용자 지정)를 활용하여 나눠서 진행
.여러 자료구조와 메서드, 함수 사용
1. 리스트 특성을 잘 활용한 예
1 2 3 4 5 | S = "orange" for idx in range(len(S)): if S[idx] != S[len(S) - idx - 1]: print("Not Palin") | cs |
복사한 기존 문자열을 역으로 읽기 S[::-1]
1 2 3 4 | S = "oranaro" if S == S[::-1]: print("isPalin") | cs |
.미리 처리한 케이스와 처리할 케이스 정리
1. 미리 구현 단계를 정리
1 2 3 4 5 | # 1. 예제 케이스 # 2. 조건 A처리 # 3. 조건 B처리 # 4. 조건 AB처리 # ... | cs |
2. 테스트 케이스 확인
- 예제 테스트 케이스
- 최소, 최대 테스트 케이스
- 예외, 랜덤 케이스 만들기
.
--
--
--
--
'PS > PS_Note' 카테고리의 다른 글
[JAVA] 코딩테스트에 자주 나오는 Map, Set 자료형(JAVA) (0) | 2020.10.17 |
---|---|
[Java] PS Coding Tip(~ing) (0) | 2020.07.21 |
[C/C++] STL map 활용 (0) | 2020.05.13 |
[C/C++] 자주 사용하는 C++ STL 자료구조 (vector, pair, queue, priority_queue) (0) | 2020.05.02 |
[C/C++] C++ Algorithm Note (~ing) (0) | 2020.04.23 |