나동빈 채널을 보면서 코딩 테스트를 준비하고 있습니다!
https://www.youtube.com/watch?v=2zjoKjt97vQ&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=3
[그리디] 곱하기 혹은 더하기
18:50초에 나오는 [곱하기 혹은 더하기] 문제를 풀어보도록 하겠습니다.
그전에 파이썬 기본부터 다져볼까요?!
Q. 입력값이 "02345"일 때, 다음 코드로 출력되는 건 무엇일까요?
n = int(input())
list = []
for i in str(n):
list.append(int(i))
print(list)
정답은...!
[ 0, 2, 3, 4, 5 ]가 아닌 [ 2, 3, 4, 5 ]입니다!
str() 함수는 숫자를 문자열로 변환할 때, 숫자의 앞에 있는 0을 무시하기 때문에 int 타입인 n 변수를 for문에서 string 타입으로 바꿀 때 2345로 변환됩니다!
0까지 포함해서 리스트에 넣고 싶다면, 아래와 같이 사용자 입력을 굳이 숫자로 받을 필요 없이 문자열로 받은 다음 그 문자열을 리스트로 변환하면 됩니다.
n = input() # input 함수는 입력값에 상관없이 문자열로 반환함.
list = []
for i in n: # 입력받은 문자열에서 각 문자를 리스트에 추가
list.append(int(i)) # 정수형으로 반환해서 list에 추가
print(list)
다시 [곱하기 혹은 더하기] 문제로 돌아와서 제가 푼 문제 코드를 공유해 보도록 하겠습니다. 문제 설명은 유튜브에서 확인해 주세요~
sum = 0
n = input()
list = []
for i in str(n):
list.append(int(i))
for i in range(len(list)-1):
if (i == 0):
sum = list[i]
if ((sum != 0 and sum != 1) and (list[i+1] != 0 and list[i+1] != 1)) :
sum *= list[i+1]
else:
sum += list[i+1]
print(sum)
동빈나 씨와 비교해서 제 코드에 아쉬운 점이 매우 많은데요! 아무래도 이제 막 코테 준비를 해서 그런 탓이겠죠~ 하지만 그만큼 성장 가능성이 농후합니다ㅎ
일단 첫 번째로 아쉬운 점은
1. 첫 번째 글자를 깔끔하게 sum으로 초기화하지 않고, 굳이 for문에서 조건을 추가해서 초기화한 점! 괜히 for 문 돌 때마다 조건 검사를 해서 매우 시간 비효율적이다.
2. 0 이하라고 표현하지 않고, 0이 아닐 때, 1이 아닐 때로 표현한 점! 그래서 코드 가독성도 떨어지고 지저분해 보인다. 코딩할 때 음.. 좀 더러운데 싶었지만 더 고민해보지 않아서 생긴 문제였다. 다음부턴 간단한 문제여도 더 고민해 보는 태도를 가져야겠다고 생각했다.
나머지는 베리굿!
동빈나 영상을 보며 필기한 것들
그리디 알고리즘은 아이디어를 통해 가장 최적인 선택을 해야 하고 그 선택이 전체적으로 최적인 해결책을 이끌어내야 한다.
그런데 그리디 알고리즘에 대해 공부하며 문제를 보고 어떻게 그리디 알고리즘을 써먹을 생각을 할 수 있을까?! 문제를 풀 때, 조건을 꼼꼼히 분석하고, 각 단계에서 어떤 선택이 최적의 해결책에 가까울지 생각해 보는 자세를 길러야겠다!!
(필기 올릴 생각 안 하고 악필로 필기하다가 중간에 글씨체 이쁘게 바꿔서 필기함ㅎ)
'코딩 테스트 일지 📒' 카테고리의 다른 글
[정렬] 두 배열의 원소 교체 + 입력받은 개수만큼 1차원 배열로, 리스트 원소값 서로 바꾸기, 리스트 원소의 합 (1) | 2024.03.19 |
---|---|
[DFS & BFS] 프로그래머스_게임 맵 최단거리 & 나동빈_미로탈출 (1) | 2024.03.13 |
[DFS & BFS] 음료수 얼려먹기 + 2차원 리스트 생성 및 입력 방법 (0) | 2024.03.11 |
[구현] 프로그래머스_키패드 누르기 (0) | 2024.03.08 |
[그리디] 모험가 길드 + input(), sort(), sorted() (1) | 2024.03.07 |