본문 바로가기

알고리즘, 문제 풀이기록

(51)
알고리즘 주간 #11 Fly me to the Alpha Centauri (미완) 여러 줄에 걸쳐 input하는 것부터 코딩이 안되어서 답안을 확인하였다. 이때 map() 메서드를 활용해주어야 하는 것을 알았다. 또 답안에서는 삼변수를 정의하여서 while문을 활용했다. 하지만 석연치 않은 점도 있었다. 예를 들어 if문에서 왜 2의 배수번째의 이동마다 움직인 거리를 1씩 더하느냐 하는 것이다. 하지만 전반적인 로직의 구조를 확인하였다. 추후 다시 돌아와서 그땐 나의 로직으로 코딩해보겠다.
알고리즘 주간 #10 설탕 배달 (미완) 답안을 확인한 문제이다. 코드의 로직을 파악하는데 중점을 뒀다. 그 로직의 중심 논리는 5kg 봉지를 최대한 활용하는 것이다. 따라서 먼저 if문을 활용해서 설탕 무게가 5의 배수이면 바로 5kg 봉지의 수를 출력한다. 그게 아니라면 5의 배수가 될 때까지 while문을 활용하여 전체 무게에서 3씩 빼준다. 이때 3씩 빼줄때마다 미리 지정해둔 봉지 변수에 1씩 더해준다. else문을 활용해 -1을 출력한다. 추후 다시 돌아와 코딩을 할 것이다.
알고리즘 주간 #9 그룹 단어 체커 (미완) 처음에 여러 줄의 입력을 어떻게 구현할지를 생각하다가 바로 답안을 확인한 문제이다. 그런데 로직조차 파악이 안된다. 진행상황표에다 X표기하고 넘어가겠다.
알고리즘 주간 #8 크로아티아 알파벳(미완) 로직조차 떠오르지 않아 바로 답안을 확인하였다. 크로아티아 알파벳을 미리 지정하여 입력된 문자열에서 그것을 찾아내어 *로 변환한 후 문자열의 전체 길이를 구해주면 되는 것이다. 알파벳을 지정할 때는 리스트를 활용하며 for문과 .replace()를 통해 * 변환을 한다. 마지막으로 len() 메서드로 문자열의 길이를 출력하면 된다. 추후 혼자서 코딩할 것을 기약하며 다음으로 넘어가겠다.
알고리즘 주간 #7 단어공부 (미완) 이 문제 역시 답안을 확인하였다. 로직을 어떻게 구현할지 도무지 떠오르는게 없었기 때문이다. 코드를 완전하게 해독하지는 못하였지만, 다음과 같은 사실을 배울 수 있었다. 1. input().upper() : 입력한 값을 대문자로 바꿔주는 메서드. 2. 집합은 중복을 허용하지 않기 때문에 중복을 제거한 list를 만들기 위해서 list(set( ))을 활용하면 됨. 3. list.count(x): list의 x의 갯수를 세는 것. 4. max(list): list의 가장 많은 요소를 세는 것.
알고리즘 주간 #6 셀프 넘버 (미완) 로직만 세우고 실제 코딩으로 이어지지는 못했다. 그 로직이란, d(n) 함수를 구현해서 10000이하의 양의 정수에서 d(n)을 제외한 값들을 한줄에 하나씩 출력시킨다는 것이다. 구글링을 통해 찾은 다른 분의 답안을 찾아보니 로직은 같았다. 다만, 1. set(집합)을 활용했다. 1-1. sorted() 메서드를 활용했다. 2. Self Number가 아닌 값을 구하기 위해 이중 for문을 활용했다. 왜 집합을 활용했을까 생각해보니, 전체 범위에서 Non-Self Number를 빼줄 때 차집합을 활용하기 위해 그렇게 하지 않았나 싶다.
알고리즘 주간 #5 평균은 넘겠지 (미완) n = input() n1, a, b, c, d, e = input().split() n2, a2, b2, c2, d2, e2, f2, g2 = input().split() n3, a3, b3, c3 = input().split() n4, a4, b4, c4 = input().split() n5, a5, b5, c5, d5, e5, f5, g5, h5, i5 = input().split() avg1 = int(a) + int(b) + int(c) + int(d) + int(e) // int(n1) avg2 = int(a2) + int(b2) + int(c2) + int(d2) + int(e2) + int(f2) + int(g2) // int(n2) avg3 = int(a3) + int(b3) + int(..
알고리즘 주간 #4 더하기사이클 (미완) N = input() if int(N) < 10: N = '0' + N add = str(sum([int(d) for d in N]))[-1] N = N[1] + add 위는 이때까지 진행한 코드이다. 창길님 말씀대로 두자리 수를 쪼개는 것을 프로그래밍적이 아니라 수학적으로 구현하여 다시 시도해보아야겠다. 이때 2번 문제가 하나의 연습 대상이 될 수 있다. 번외로 박현준 멘토님의 특강을 토대로 학습법도 신경을 쓰며 진행해갈 것이다.