티스토리 뷰

PS/PS_Note

[Python] PS Coding Tip (~ing)

Aaron 2020. 5. 13. 17:04
반응형


.입출력


.한 줄에 입력받는 경우

- 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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 상하좌우(쓰기 편한 방법)
dx = [-1100]
dy = [00-11]
 
# 반시계 방향
dx = [0-101]
dy = [10-10]
 
# 시계 방향
dx = [010-1]
dy = [10-10]
 
###
 
# 상하좌우(시계 방향)
dx = [ -1-1-101110 ];
dy = [ -101110-1-1 ];
cs


2. tuple

1
2
3
4
5
6
7
8
9
dx, dy = [0-101], [10-10]
 
# index 활용 (find도 가능)
+= dx['ENSW'.index(way)]
+= 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
= "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
= "oranaro"
 
if S == S[::-1]:
    print("isPalin")
cs


.미리 처리한 케이스와 처리할 케이스 정리

1. 미리 구현 단계를 정리

1
2
3
4
5
# 1. 예제 케이스
# 2. 조건 A처리
# 3. 조건 B처리
# 4. 조건 AB처리
# ...
cs


2. 테스트 케이스 확인

  - 예제 테스트 케이스

  - 최소, 최대 테스트 케이스

  - 예외, 랜덤 케이스 만들기



.

--

--

--

--


반응형
댓글
최근에 올라온 글
최근에 달린 댓글
링크
Total
Today
Yesterday