본문 바로가기

PYTHON91

프로그래머스 Lv1 콜라 문제 (python) 콜라 문제 풀이 문제의 상위 지문을 잘 못 이해하고 있어서 시간이 조금 걸렸다. 그것만 아니었다면 금방 풀었다. 빈 병을 주면 그것으로 총 몇 개의 콜라로 바꿔먹을 수 있냐를 제시한 문제이다. 모든 받은 콜라의 개수를 기록한 변수를 지정. while문을 돌면서 빈 병을 바꿀 수 있는 개수로 divmod를 이용해 파악하고 바꿀 수 있는 개수를 coke로 곱하면 이번에 바꾼 콜라 수 빈병은 못 바꾼 빈 병과 함께 바꾼 콜라를 비웠으니 이를 합하면 다시 빈 병이 됨 이 while문은 현재 가진 빈병이 바꿀 수 있는 빈병보다 적지 않을 때까지 반복. 모든 바꿔먹은 콜라 갯수를 return # 3개를 가져다주면 2개를 주는 경우도 생각해봐야함 def solution(bottle, coke, empty_coke):.. 2024. 2. 3.
프로그래머스 Lv1 달리기 경주 (python) 달리기 경주 풀이 처음엔 위 문제를 보고 간단하게 a[0],a[1] = a[1], a[0] 을 사용하면 되겠다 하고 아래 처럼 풀었다. 그런데 시간초과가 발생했다.... # 자기 바로 앞의 선수를 추월 할 추월한 선수의 이름을 부름 # 만약 현재 2등 선수의 이름이 불러졌다번 1등 선수를 제치고 1등이 된거니 # win[1], win[2] = win[2], win[1] 이 됨 def solution(players, callings): N = len(callings) for i in range(N): k = players.index(callings[i]) players[k], players[k-1] = players[k-1], players[k] return players 그래서 다른 방법을 찾았다. 딕셔.. 2024. 2. 2.
프로그래머스 Lv1 명예의 전당 (1) (python) 명예의 전당 (1) 풀이 머리가 꼬인 상태여서 어떻게 풀어야지 하다가, 몇 번 틀리고 맞췄다. sorted()를 이용해 줬다. 더 좋은 방법이 있을 것이라 생각했는데, 다른 살마 풀이를 보니 좋은 풀이가 있었다. 우선 명예의 전당이 안 찼을 때, 찼을 때로 나눠주고, 찼을 때도, min(honor)의 값이 score [i]보다 작을 때, 클 때를 구분해 주었다. 그렇게 정리한 코드가 아래 코드이다. # k번째 순위의 가수 점수보다 더 높으면 출연 가수의 점수가 명예의 전당에 오르고, k번째 순위의 점수는 내려옴. # 매일 '명예의 전당' 최하위 점수를 발표. k = 3, def solution(k, score): # 1일차 발표와 스코어 입력 honor = [score[0]] announce = [sco.. 2024. 2. 2.
프로그래머스 Lv1 바탕화면 정리 (python) 바탕화면 정리 풀이 파일이 인덱스와 인덱스 사이에 있으므로 이 부분에 대해서만 확인 하면 문제가 생기진 않을 듯하다. 좌상에서 우하로 드래그를 하도록 한다 가정하자. 파일또한 각 정확한 인덱스에 있다고하면, 우하의 위치만 각 +1, +1 해주면 문제가 없다. 이를 바탕으로 가장 위, 가장 왼쪽, 가장 아래, 가장 오른쪽 의 위치만 찾아주고, 아래와 오른쪽에만 각 +1해주면 해결된다. 난 아래처럼 풀었다. # '#'의 의 실제 인덱스는 i~i+1 까지 안에 있음 드래그를 통하기 때문, 이를 조정필요. # 모든 파일을 드래그 할 수 있는 한 번의 값 # 맨 왼쪽과 위는 실제 인덱스를 맨 오른쪽과 아래는 실제 인덱스+1을해주자. # 처음에 [맨 위, 맨 왼, 맨 아래, 맨 오른]을 하고 return시에는 맨 .. 2024. 2. 2.
프로그래머스 Lv2 최솟값 만들기 (python) 최솟값 만들기 풀이 처음엔 어떻게 하지 인덱스를 다 돌리면서 확인을 해야하는건가 아니면 완전탐색을 이용해야하는 건가 그런 생각을 하다가, 수학적 접근을 했다. 최솟값을 만들어야 하는데 최댓값이 나오는 제일 먼저는 A의 제일 큰 수와 B의 제일 큰 수를 곱하고, 그 다음의 큰 수와 그 다음의 큰 수를 곱하기 를 반복하면 만들 수 있는 최댓값이 된다. 그러면 최솟값은 내가 가진 제일 큰 수를 제일 작은 수와 곱하고, 그 다음 큰 수를 그다은 제일 작은 수와 곱하기를 반복하면 된다. 이유는 어쨌든 모든 수는 한 번씩은 곱해져야하니까. 이 방법으로 A와 B 둘 모두 정렬시키고, 하나는 오름차순, 다른 하나는 내림차순으로 진행하였다. 그리고 for문을 통해 각 곱의 합을 진행시켜주니 해결되었다. def solut.. 2024. 2. 2.
프로그래머스 Lv2 숫자 변환하기 (python) 숫자 변환하기 풀이 처음에는 재귀로 풀려고 했다가 너무 많은 재귀로 실패해서, 이후엔 어떻게 풀어야 하는지 감도 안 잡혔다. 찾아보니 BFS나 DP로 풀어야 한다고 했다. 너무 오랜만에 만지는 BFS라 감을 잃었지만 다시 시도해봤다. 우선 다음처럼 풀었다. 1. visited를 생성 2. queue를 생성하고 Q에 초깃값으로 x를 입력 3. visited [x]를 0에서 1로 입력 3-1. 찾고 나서 1빼줄건데, 1로 해준 이유는 0을 False처럼 다루기 위해서임 4. while문을 진행하기. Q의 처음 값을 확인하고, y가 아니면 할 수 있는 3가지를 이용하기. 3가지가 제한 없는 내용이라면, visited [다음 수]에 visited [이전 수]+1 입력 5. 3가지 방법을 통해서 나온 중 Q에서 .. 2024. 2. 1.