✔ 택배 배달과 수거하기 [프로그래머스 150369] 문제 분석하기 가장 멀리 있는 집부터 택배를 배달하도록 하며 이때 이 집에 몇 번 트럭이 오게 되는지 카운트하도록 함 예) cap = 4, deliveries = [1, 0, 3, 1, 2], pickups = [0, 3, 0, 4, 0] i deliver pickup count answer 5번째 집 2 → 2 - 4 = -2이므로 1번 방문 해야 함 0 → 0 - 4 = -4이므로 1번 방문해야 함 1번 5 * 1 * 2 = 10 0 + 10 = 10 4번째 집 -2 → -2 + 1 = -1이므로 5번째 집 배달을 가면서 배달 가능 -4 → -4 + 4 = 0이므로 5번째 집에서 돌아오면서 수거 가능 0번 10 3번째 집 -1 → -1 + 3 = ..
✔ 이모티콘 할인행사 [프로그래머스 150368] 문제 분석하기 이모티콘에 따른 10, 20, 30, 40% 할인률에 대한 모든 경우의 수를 구한 후, 이모티콘 플러스 서비스 가입 수와 이모티콘 매출액을 갱신함 손으로 풀어보기 이모티콘에 따른 10, 20, 30, 40% 할인률에 대한 모든 경우의 수를 구한 후 이모티콘 플러스 서비스 가입 수와 이모티콘 매출액을 갱신 이모티콘 플러스 서비스 가입 수와 이모티콘 매출액을 반환 슈도코드 작성하기 users(카카오톡 사용자의 구매 기준) emoticons(이모티콘의 정가) answer(이모티콘 플러스 서비스 가입 수와 이모티콘 매출액) discount_arr(할인률에 따른 이모티콘의 가격) 이모티콘 할인 경우의 수 구하기(discount_arr, users, ..
✔ 마법의 엘리베이터 [프로그래머스 148653] 문제 분석하기 0 ~ 4일 경우 0이 될 때까지 -1씩 버튼을 누르고, 6 ~ 9일 경우 앞의 자리에 하나를 더한 후 10이 될 때까지 +1씩 버튼을 누르도록 함 만약 5일 경우 앞의 자리가 0 ~ 4일 경우 -1씩 버튼을 누르고, 6 ~ 9일 경우 앞의 자리에 하나를 더한 후 +1씩 버튼을 누르도록 함 손으로 풀어보기 정수 배열에 숫자를 저장 숫자를 하나씩 살피며 마법의 돌의 수를 세도록 함 0 ~ 4일 경우 0이 될 때까지 -1씩 버튼을 누름 6 ~ 9일 경우 앞의 자리에 하나를 더한 후 10이 될 때까지 +1씩 버튼을 누르도록 함 만약 5일 경우 앞의 자리가 0 ~ 4일 경우 -1씩 버튼을 누르고, 6 ~ 9일 경우 앞의 자리에 하나를 더한 후 +1..
✔ 유사 칸토어 비트열 [프로그래머스 148652] 문제 분석하기 가운데 범위에는 무조건 0이 되기 때문에 범위 안에 있는 값 중에서 가운데 값을 제외하고 1만을 찾도록 함 예) 2번째 유사 칸토어 비트열, l = 4, r = 17일 때 2번째 유사 칸토어 비트열은 1번째 유사 칸토어 비트열을 사용하여 만들어지므로 11011 11011 00000 11011 11011 i i번째 유사 칸토어 비트열 0 1 → 5⁰개를 가짐 1 11011 → 5¹개를 가짐 2 11011 11011 00000 11011 11011 → 5²개를 가짐 i r (= 17)보다 크거나 l (= 4)보다 작다면 유사 칸토어 비트열 0 1 + 5 * i = 1 1 + 5 * (i + 1) -1 = 5 11011 11011 00000 1..
✔ 테이블 해시 함수 [프로그래머스 147354] 문제 분석하기 col번째 컬럼의 값을 기준으로 오름차순 정렬 → 값이 동일할 경우, 첫 번째 컬럼의 값을 기준으로 내림차순 정렬 → row_begin부터 row_end 행에 대해 i로 나눈 나머지들의 합의 저장 → 나머지들의 합을 가지고 XOR한 값을 반환 손으로 풀어보기 col번째 컬럼의 값을 기준으로 오름차순 정렬 값이 동일할 경우, 첫 번째 컬럼의 값을 기준으로 내림차순 정렬 row_begin부터 row_end 행에 대해 i로 나눈 나머지들의 합의 저장 나머지들의 합을 가지고 XOR한 값을 반환 슈도코드 작성하기 data(테이블의 데이터) col, row_begin, row_end(해시 함수에 대한 입력) answer(테이블의 해시 값) data를 ..
✔ 디펜스 게임 [프로그래머스 142085] 문제 분석하기 현재까지 진행한 라운드 중 가장 많은 수의 적이 포함된 라운드에 무적권을 사용하도록 함 예) [4, 2, 4, 5, 3, 3, 1] 라운드 enemy (적의 수) 현재까지 진행한 라운드 중 가장 많은 수의 적이 포함된 라운드 무적권 사용 유무 n (병사의 수) 1 4 1 O 7 → 7 2 2 1 X 7 → 5 3 4 3 O 5 → 5 4 5 4 O 5 → 5 5 3 4 X 5 → 2 6 3 4 X 2 → -1 손으로 풀어보기 현재까지 진행한 라운드 중 가장 많은 수의 적이 포함된 라운드일 경우 무적권을 사용하도록 함 이때 최대힙을 이용 무적권을 모두 사용했으면서 병사의 수가 0보다 작아질 경우 종료 슈도코드 작성하기 n(준호가 처음 가지고 있는 ..
✔ 점 찍기 [프로그래머스 140107] 문제 분석하기 (x, y)에 대해서 d보다 작으면서 0부터 + k씩 만큼에 대해 원의 방정식을 사용해 d를 넘지 않는지 확인하도록 함 예) k = 1, d = 5 1 * 0, 1 * 1, 1* 2, 1 * 3, 1 * 4, 1* 5 = 0, 1, 2, 3, 4, 5 0 → x가 0일 때 가질 수 있는 최대 y 값은 √(5² - 0²) = √(25 - 0)이며 y도 k씩 만큼 커지므로 √25 / k + 1(0, 0) = 6 (0, 0), (0, 1), (0, 2), (0, 3), (0, 4), (0, 5) 1 → x가 1일 때 가질 수 있는 최대 y 값은 √(5² - 1²) = √(25 - 1)이며 y도 k씩 만큼 커지므로 √24 / k + 1(1, 0) = 5 (..
✔ 귤 고르기 [프로그래머스 138476] 문제 분석하기 해시맵에 귤의 종류와 귤의 개수를 저장한 후, 귤의 개수를 리스트에 저장한 후 내림차순 정렬을 하도록 함 이후 서로 다른 종류가 최소이어야 하므로 가장 많은 귤의 개수를 가진 종류부터 담으면서 k개보다 많이 담을 경우를 찾도록 함 예) k = 6, [1, 3, 2, 5, 4, 5, 2, 3] {1:1, 2:2, 3:2, 4:1, 5:2} list = [2, 2, 2, 1, 1] 2 + 2 + 2 = 3이므로 사용한 귤의 종류는 3개 손으로 풀어보기 해시맵에 귤의 종류와 귤의 개수를 저장 귤의 개수를 리스트에 저장한 후 내림차순 정렬 가장 많은 귤의 개수를 가진 종류부터 담으면서 k개보다 많이 담을 경우를 찾으면 종료 이때 귤의 개수를 가진 종류를 ..