지식 공유

[파이썬] 코딩 테스트에 자주 사용하는 패턴 및 팁, 기초편

한상규 2022. 2. 18. 01:09

0. 개요

코딩 테스트 열심히 준비하던 시절 언어별로 자주 사용되는 패턴을 정리해두었습니다.

코딩 테스트에 가장 유리한 언어라고 생각하는 파이썬 편을 준비하였습니다.

파이썬을 사용하다가 조심해야 하는 팁도 적어보았습니다.

1. 원소값이 0인 1차원 배열 만들기

arr = [0]*2 # [0,0]

 

2. 원소값이 0인 2차원 배열 만들기

arr = [[0]*3 for i in range(5)]
# [[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]]

 

3. range()를 사용하면 i 값을 중간에 수정할 수 없다.

for i in range(5):
	print(i)
	i = 10 # i값을 수정해도 for 조건에는 영향이 없다.

=> 
0
1
2
3
4

# for를 사용하던 중 i 값을 바꿔야 하는 경우 while을 사용하자
i = 0
while(i<5):
	print(i)
	i = 10

=> 0

 

4. 한줄로 들어오는 데이터를 변수에 저장하기

# 한줄에 여러값 입력 받기
# 0 1 2 3
x1, y1, x2, y2 = map(int,input().split())

# 0 1 2 3 4 5 6 7
a = list(map(int, input().split())
print(a)
=>[0, 1, 2, 3, 4, 5, 6, 7]

# 01234567
a = list(map(int, input())
print(a)
=>[0, 1, 2, 3, 4, 5, 6, 7]

 

5. len()으로 길이 얻기

arr = [1,2,3,4]
print(len(arr))
=>4

str= "hello"
print(len(str))
=>5

 

6. string의 n번째 char값 얻기

str= "hello"
print(str[1]) # 문자열도 index로 접근할  수 있다.
=> e

 

 

 

7. list는 call by reference이다. 그래서 인자값이 변한다.

# 리스트를 사용할 때는 call by reference가 된다.
a = [[1,0],[0,1]]
def foo(_a):
    _a[0][0] = 0 
    print(_a)
foo(a)
print(a)

=>
[[0, 0], [0, 1]]
[[0, 0], [0, 1]]



# 깊은 복사를 원한다면 아래처럼 사용하면 된다.
import copy
a = [[1,0],[0,1]]
def foo(_a):
	_a[0][0] = 0
	print(_a)
foo(copy.deepcopy(a))
print(a)

=>
[[0, 0], [0, 1]]
[[1, 0], [0, 1]]

 

 

8. input()보다 빠른 입력 받기

import sys
sys.stdin.readline()

백준 문제 풀 때는 이것 덕분에 통과하는 경우가 있다.

제대로 된 문제라면 input()을 사용해도 풀려야 한다.

실제 기업 코테에서 input()을 사용해서 timeout이 발생하진 않는다.

 

9. print() 한번으로 여러 변수 출력하기

a = 1
b = 2
c = 3
s = "str"
print(a, b, c, s)

=> 1 2 3 str

 

10. 정렬

#정렬
arr = [66,2638,124,73421,324]
arr.sort()

=>[66, 124, 324, 2638, 73421]

#역정렬
arr = [66,2638,124,73421,324]
arr.sort()
arr.reverse()
print(arr)

=>[73421, 2638, 324, 124, 66]

#특정 기준으로 정렬
student_tuples = [
    ('john', 'A', 15),
    ('jane', 'B', 12),
    ('dave', 'B', 10),
]

res = sorted(student_tuples, key=lambda x: x[2])
print(res)
=>[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

 

 

11. 제곱 math.pow 없이

#제곱
print(3**2)
=> 9

 

12. 제곱근 math.sqrt 없이

# 제곱근 sqrt
a**0.5

 

13. list 뒤집기

# list 뒤집기
list1 = [1,2,3]
print(list1[::-1]) # [3,2,1]
print(list1) # [1,2,3]

list2 = list1[::-1] # 이렇게 따로 저장해야 뒤집힌 상태가 유지된다.
print(list2)

=>
[3, 2, 1]
[1, 2, 3]
[3, 2, 1]