본문 바로가기

전체 글109

프로그래머스 Lv2 귤 고르기(python) 귤 고르기 풀이 귤이 많은 개수를 구하면 쉽게 풀릴 것이라 생각해서, 아래처럼 풀이를 해봤다. 딕셔너리 대신 리스트를 이용해서 풀어보았고, 제출했을 때, 꽤나 시간이 오래 걸려서 실패하나 싶었지만, 아슬하게 통과를 했다. # 귤을 수확 # 'k'개를 골라 상자 하나에 담아 판매, 귤을 크기별로 분류, 서로 다른 종류의 수를 최소화 # [1, 3, 2, 5, 4, 5, 2, 3] 8개 중 6개의 귤이면, 1, 4 를 제외하면 2,3,5롷 서로 다른 종류가 최소 # {1:1, 2:2, 3: 2, 4: 1, 5:2}이니까 # 서로 다른 종류의 수의 최솟값을 return def solution(k, tangerine): numbers = [[i+1 , 0] for i in range(max(tangerine)).. 2024. 2. 6.
프로그래머스 Lv1 덧칠하기 (python) 덧칠하기 풀이 처음에 어 쉽네 했는데 멍청하게 풀어서 실패했다. 그리고 다음은 이렇게 해야지! 하고 풀었는데 계속 실패했다. 왜지왜지왜지 하다가 보니까 stamp.append(section[i]+m-1) 부분을 stamp.append(stamp[-1]+m) 로 적어놨다. 하필 테스트케이스가 다 통과되는 바람에 제대로 찾지를 못했다. 그래도 코드를 천천히 보면서 직접 해결할 수 있어서 다행이다. # n미터의 벽을 따로따로 나눠서 1~n까지의 벽돌이 있다고 생각해보자. # m은 한번에 연속된 벽돌을 페인트칠할 수 있는 갯수임 막대기로 페인트를 찍어낸다 생각하자. # section은 그 n개의 벽돌 중 색칠이 안 된 벽돌 번호. # section을 모두 해결하려면 최소 몇번의 m 막대기를 찍어야하나? def .. 2024. 2. 5.
프로그래머스 Lv2 짝지어 제거하기 (python) 짝지어 제거하기 풀이 처음에는. replace의 방법으로 풀었는데 너무 시간이 오래 걸렸다. 도저히 무슨 방법을 써야 하지 답이 생각이 안 났는데, stack 방법을 찾게 되어서, stack을 이용해서 새로 풀었다. 효율성 검사에서 시간이 걸려, 조마조마했지만 다행스럽게 통과되었다. stack을 이용하되, pop()과 append()를 사용하게 되면 시간이 더 오래 걸릴 것이라 판단해서 top을 이용해서 문제를 풀었다. 다행히 몇 번의 반복문 없이 for문 한 번만 돌리면 문제가 해결되어서 더 골머리 앓지 않아도 되어서 다행이다. # stack 이용 def solution(s): stack = [0] * 1000001 # top을 이용해서 시간 줄이기 top = -1 for i in range(len(s.. 2024. 2. 5.
프로그래머스 Lv2 멀리 뛰기 (python) 멀리 뛰기 풀이 처음엔 재귀로 했으나, 이번에도 maximum에 걸렸다. dp를 이용했다. 현재 칸의 경우의 수는 1칸 전과 2칸 전의 경우의 수를 합친 것과 같다는 것에 기인했다. 그러니 아래처럼 코드가 나왔따. def solution(n): # n번 칸에 도착할 수 있는 경우의 수는 1칸 전에서의 경우의 수와 2칸 전의 경우의 수를 더한 것. dp = [0,1,2] + [0] * 1998 for i in range(3, n+1): dp[i] = dp[i-1] + dp[i-2] return dp[n] % 1234567 다른 사람 풀이 다들 비슷비슷하게 풀었다. def solution(n): dp = [0]*2002 dp[1], dp[2] = 1, 2 for i in range(3, n+1): dp[i].. 2024. 2. 4.
프로그래머스 Lv2 피보나치 수 (python) 피보나치 수 풀이 처음엔 재귀함수로 시도해 봤으나, 시간도 오래 걸리고, maximum deepth 에러가 생겨서 실패했다. 그래서 while문을 이용해봤고 아래처럼 진행을 했다. 1. F=[0,1,2] 변수를 생성 2. n = 2일 때는 1을 반환시키고 이게 아니라면, while문에 입장 3. i변수를 이용해서 n과 동일해질때의 값을 반환할 수 있게 제약 걸고, while문 내에서는 F.append() 대신 [0], [1], [2]를 계속해서 바꿔주는 방식으로 이용. 이유 append()도 은근히 시간이 걸리는 녀석임 4. while문을 벗어나면 F[2] 즉, n번째가 되는 값을 1234567로 나눈 나머지를 반환. 이때 n번째는 0번째부터 새는 n번째. def solution(n): F = [0, 1.. 2024. 2. 4.
프로그래머스 Lv2 의상 (python) 의상 풀이 처음엔 모든 경우의 수를 구하기 위해, 재귀함수를 이용해 모든 옷을 입을 수 있는 방법을 구하도록 하였다. 방법에는 문제가 없는 것으로 보이나, 시간이 너무 오래 걸리게 되어 실패했다. # 코니는 매일 다른 옷을 조합. 종류별, 1가지 의상만 착용 # 다른 의상이 겹쳐도, 다른 의상이 겹치지 않거나 의상을 추가로 더 착용한 경우에는 서로 다른 방법으로 착용한 것. # 코니는 하루에 최소 한 개의 의상 # 변수 설정 answer = 0 clothes_kind = [] # 옷을 입는 방법을 추가 # puton(clothes_dict, 착용갯수, 착용 의상 인덱스, 입은 의상 리스트) def puton(clothes_dict, i, j, put_cloth): global answer # 입은 의상 .. 2024. 2. 4.