티스토리 뷰
C++로 코딩 테스트를 연습하다 보니 속도가 너무 붙지 않아, 이곳저곳에서 팁을 찾아보던 와중 파이썬으로 DFS를 풀이한 걸 보게 되었다.
C++로 작성하면 10줄은 거뜬히 넘을텐데 파이썬으로 매우 간단하게 푸는 걸 보고 신선한 충격을 받았다. 게다가 동빈좌의 코딩 강의를 보고 파이썬에 영업 당해버려 앞으로 파이썬으로 코테를 연습하려고 한다.
이 페이지는 코딩 테스트를 할때 사용되는 파이썬의 Use case에 대해 정리하기 위한 페이지이다. 두고두고 업데이트 하려한다.
파이썬에 대한 기본적인 공부가 필요하다면 이 링크를 활용해 공부하는 것을 추천한다.
1. 테스트 케이스 입력 방법
input()
import sys
sys.stdin.readline().rsplit('\n')
입력 방법에는 크게 두가지가 있다. 간단하게 input() 을 사용해도 되고, sys.stdin.readline() 을 사용하는 방법도 있는데 input()의 경우 속도가 느리므로 입력에 있어 더 빠른 속도가 필요할 경우 sys.stdin.readline() 을 사용하면 된다.
참고로 sys.stdin.readline() 은 개행문자도 함께 받아오므로 이를 잘라주기 위해서는 뒤에 rsplit 메서드를 사용해 '\n' 을 제거해주면 된다.
이때 위 두 입력 방법 모두 문자열로 입력 데이터를 받아오므로 만약 정수를 받아와야 한다면 다음과 같이 사용할 수 있다.
a, b = map(int, input().split())
위 입력 방법은 입력 데이터를 공백을 기준으로 나누어 map 함수를 이용해 이를 int 타입으로 형변환을 수행해준다.
이때 input().split() 은 리스트를 반환한다.
2. 문자열 처리 방법
파이썬은 문자열을 처리할때 매우 간편하다. C언어 처럼 for문을 일일이 돌며 삽질하지 않아도 된다 ㅎ
1) 대문자, 소문자 변환
words = 'baek kwangrok'
words_upper = words.upper()
words_lower = words.lower()
2) 중복되는 문자 제거
words = 'baek kwangrok'
words_abbreviation = ''.join(set(words))
3) 문자 개수 계산
words = 'baek kwangrok'
word_count_k = words.count('k')
4) 리스트 또는 튜플로 변환
>>> list('Baek')
['B', 'a', 'e', 'k']
>>> tuple('Baek')
('B', 'a', 'e', 'k')
5) 역순 출력
def reverse_string1(string):
return string[::-1]
def reverse_string2(string):
return reversed(string)
words = input()
print(''.join(reverse_string1(words)))
3. 이중 리스트 생성
그래프 탐색 문제를 풀때 이차원 배열이 필요한 경우가 있다. 이때 파이썬에서는 이중 리스트를 활용할 수 있다.
n = 10
graph = [[] for _ in range(n + 1)]
for _ in range(m):
x, y = map(int, input().split())
graph[x].append(x)
graph[y].append(x)
위 예제는 n개만큼의 행을 생성해주고 열은 1개씩 생성된다. 따라서 아래에 데이터를 입력할때 append 메서드를 사용하여 데이터를 추가해준다.
만약, 열 또한 n개를 생성해주고 싶다면 아래의 방식을 이용할 수 있다.
n = 10
graph = [[]*(n) for _ in range(n)]
for _ in range(m):
x, y = map(int, input().split())
graph[x][y] = 1
graph[y][x] = 1
n개의 열이 있으므로 직접 인덱스에 접근하여 값을 할당해줄 수 있다.
4. 출력 방법
1) 여러 개 하나로 합쳐 출력
print('Kwangrok', 'Baek', sep='')
2) 뒤에 값 추가하여 출력
print('Hi', end=' kwnagrok\n')
이때 print 함수는 뒤에 \n을 붙이는데 end를 이용해 다른 값을 지정할 경우, \n이 사라지므로 개행이 필요하다면 end에 \n도 포함시켜줘야한다.
5. 배수, 약수 계산
1) 배수
x = 10
for i in range(1, 10):
if x % i == 0:
print(x, ' 은', i, '의 배수')
2)약수
x = 10
for i in range(1, 11):
if x % i == 0:
print(i, ' 은', x, '의 약수')
+) 부록
1) 튜플과 문자열은 요소 변경, 추가, 삭제가 불가능하다.
2) 튜플은 컴프리헨션이 불가능하다.
3) 튜플, 리스트, 딕셔너리 등 데이터를 담을 수 있는 자료형을 컨테이너라고 한다.
4) range() 는 Python3 에서는 이터레이터를 반환하고, Python2 에서는 리스트를 반환한다. 이때 Python2 에서는 매우 큰 숫자를 받을 경우, 이를 일일히 리스트로 생성하므로 메모리를 많이 차지하는 문제가 있었는데, Python3 에서는 이를 해결하고자 객체인 이터레이터를 반환한다.
- Total
- Today
- Yesterday
- 깊이우선탐색
- ARM Cortex-M3 시스템 프로그래밍 완전정복1
- 구글 머신러닝 부트캠프
- Cortex-M3
- 코딩테스트
- 머신러닝 엔지니어
- 패스트캠퍼스
- Cortex-M0
- 그래프
- 너비우선탐색
- 완주반
- 백준
- Cortex 시리즈
- 텐서플로우 자격증
- spidev
- 머신러닝
- SQL 완주반
- 딥러닝
- ARM 역사
- Shortcut
- ResNet
- 강의제안
- DFS
- TensorFlow Developer Certificate
- 그래프탐색
- 딥러닝 엔지니어
- 알고리즘
- BFS
- mmc_spi
- CNN
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |