티스토리 뷰

728x90

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 에서는 이를 해결하고자 객체인 이터레이터를 반환한다.

728x90