코딩테스트를 위해 드디어 알고리즘 공부를 시작했다. 컴공 출신이지만 편입으로 들어가서 알고리즘 수업을 한번도 들어본 적이 없다..💩 탄탄한 기초를 위해 책을 하나 정하려고 많은 후기들을 찾아 봤는데 종만북은 대회용 문제들로 구성되어 기업 코딩테스트에 적합하지 않다는 평이 많아, 나동빈님의 <이것이 코딩테스트다>라는 책을 선택했다.
본격적으로 알고리즘 이론에 들어가기 전 코드업 기초 100제를 풀어보는 것을 추천해서 일주일에 걸려 문제를 풀었다. 보통 문제를 푸는데 30분 이상이 소요되면 다른 사람들의 풀이를 보고 감을 익히기를 추천하던데, 안 풀리는 문제를 오랫동안 잡고 있어서 100문제를 푸는데에 시간이 생각보다 많이 걸린 것 같다.. 쒸익쒸익..

파이썬에는 avg() 메서드가 없다. 보통 함수를 만들어서 사용한다.
range(a, b, c)
위의 형태로 쓰면 a부터 b-1까지 c만큼 건너뛰는 수를 뜻한다. 예를 들면 range(0, 50, 5) 라고 했을 때 0, 5, 10, 15....45 를 뜻한다고 생각하면 된다.
>>> import random
>>> random.random()
0.90389642027948769
random() 메서드는 0 이상 1 미만의 숫자 중에서 아무 숫자나 하나 뽑아서 돌려준다.
>>> random.randrange(1,7)
6
>>> random.randrange(1,7)
2
주사위처럼 1에서 6까지의 정수 중 하나를 무작위로 얻으려면 randrange() 메서드가 편리하다. 1부터 6이 아닌 random.randranger(1, 7)라고 쓰였는데, "1 이상 7 미만의 난수"라고 생각하면 이해가 쉬움.
>>> abc = ['a', 'b', 'c', 'd', 'e']
>>> random.shuffle(abc)
>>> abc
['a', 'd', 'e', 'b', 'c']
>>> random.shuffle(abc)
>>> abc
['e', 'd', 'a', 'c', 'b']
순서형 자료(sequence)를 뒤죽박죽으로 섞어놓는 메서드
>>> abc
['e', 'd', 'a', 'c', 'b']
>>> random.choice(abc)
'a'
>>> random.choice(abc)
'd'
>>> menu = '쫄면', '육개장', '비빔밥'
>>> random.choice(menu)
'쫄면'
아무 원소 하나를 뽑아주는 메서드
>>> random.choice([True, False])
True
>>> random.choice([True, False])
False
input()으로 여러 개의 숫자를 받을 때 일일이 형변환을 해주려면 for문을 해야한다. 여기서 map() 함수를 이용하면 편리하다.
data = map(int, input().split()) # 입력값: 1, 2, 3, 4, 5, 6, 7, 4, 2, 1
print(data)
print(list(data))
# 출력결과 : [1, 2, 3, 4, 5, 6, 7, 4, 2, 1]
join()을 사용하여 리스트(배열)의 각 요소들을 하나로 합친 문자열을 반환한다. 요소들을 "구분자"로 구분하여 표현할 수 있다.
# 리스트(배열) 정의
food = [ "123", "자장면", "짬뽕", "탕수육", "물만두", "팔보채" ]
# 요소들 사이에 공백 넣기 (구분자는 공백)
print(" ".join(food))
# 출력 결과: 123 자장면 짬뽕 탕수육 물만두 팔보채
# 모든 요소들을 하나로 연결하여 출력 (구분자 없음)
print("".join(food))
# 123자장면짬뽕탕수육물만두팔보채
# 줄바꿈 문자를 구분자로 하여 출력
print("\n".join(food))
""" 출력 결과:
123
자장면
짬뽕
탕수육
물만두
팔보채
"""
❗️ 위의 예제에서 "123" 을 123 이렇게 숫자로 만들면, expected string, int found (문자열이 있어야 할 곳에 숫자/정수가 있다) 라는 에러가 나게 된다. join() 메서드를 사용하려면 각 요소들이 모두 문자열이어야 한다.
문자열 리스트는 join() 메서드를 사용하여 문자열로 반환되지만, 숫자 리스트는 단순히 join()만을 이용하여 문자열로 반환할 수 없다. 이럴 땐 map으로 숫자를 담고 있는 numbers 리스트 값들을 string으로 바꾸고, join을 사용하여 최종적으로 string이 출력되도록 한다.
numbers = [10, 20, 30]
print(' '.join(map(str, numbers)))
# 출력 결과
10 20 30
n = 3
m = 4
array = [[0] * m for _ in range(n)]
print(array) # 실행결과 : [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
언더바(_)는 반복을 위한 변수의 값을 무시할 때 자주 사용한다.