diff --git "a/12\354\243\274\354\260\250/\353\254\270\354\240\2341/\353\260\225\353\257\274\354\204\234_\354\230\210\354\202\260.py" "b/12\354\243\274\354\260\250/\353\254\270\354\240\2341/\353\260\225\353\257\274\354\204\234_\354\230\210\354\202\260.py" new file mode 100644 index 0000000..c249289 --- /dev/null +++ "b/12\354\243\274\354\260\250/\353\254\270\354\240\2341/\353\260\225\353\257\274\354\204\234_\354\230\210\354\202\260.py" @@ -0,0 +1,13 @@ +def solution(d, budget): + answer = 0 + d = sorted(d) + # '최대' 몇 개의 부서에게 지원이 가능한지 묻는 거니까 + # 작은 예산부터 예산을 주고 다음 부서에게 줄 남은 금액이 있으면 + # 그 다음 예산의 부서에게 부여하는게 타당함. + + for money in d: + if money <= budget: + answer += 1 + budget -= money + + return answer \ No newline at end of file diff --git "a/12\354\243\274\354\260\250/\353\254\270\354\240\2342/\353\260\225\353\257\274\354\204\234_\352\265\254\353\252\205\353\263\264\355\212\270.py" "b/12\354\243\274\354\260\250/\353\254\270\354\240\2342/\353\260\225\353\257\274\354\204\234_\352\265\254\353\252\205\353\263\264\355\212\270.py" new file mode 100644 index 0000000..17a1326 --- /dev/null +++ "b/12\354\243\274\354\260\250/\353\254\270\354\240\2342/\353\260\225\353\257\274\354\204\234_\352\265\254\353\252\205\353\263\264\355\212\270.py" @@ -0,0 +1,56 @@ +def solution(people, limit): + answer = 0 + people = sorted(people) # 몸무게 정렬 + boat = 0 # 보트 현재 무게 측정 + + left_idx = 0 # 태울 수 있는 가장 가벼운 사람 찾는 index + right_idx = len(people) - 1 # 태울 수 있는 가장 무거운 사람 찾는 index + # 보트를 최대한 적게 사용하면서, 보트에 태울 수 있는 조합: 가장 무거운 사람 + 가장 가벼운 사람 + + while left_idx <= right_idx: + boat += people[right_idx] # 현재 제일 무거운 사람 태우고 + right_idx -= 1 + + if people[left_idx] <= limit - boat: # 가벼운 사람 태울 수 있으면 태움 + left_idx += 1 + answer += 1 + + boat = 0 # 보트 떠나 보내고 + + return answer + +''' +정확성 테스트 +테스트 1 〉 통과 (0.92ms, 9.1MB) +테스트 2 〉 통과 (0.73ms, 9.08MB) +테스트 3 〉 통과 (0.71ms, 9.3MB) +테스트 4 〉 통과 (0.64ms, 9.31MB) +테스트 5 〉 통과 (0.35ms, 9.04MB) +테스트 6 〉 통과 (0.36ms, 9.11MB) +테스트 7 〉 통과 (0.56ms, 9.26MB) +테스트 8 〉 통과 (0.03ms, 9.32MB) +테스트 9 〉 통과 (0.08ms, 9.1MB) +테스트 10 〉 통과 (1.02ms, 9.28MB) +테스트 11 〉 통과 (0.53ms, 9.18MB) +테스트 12 〉 통과 (0.49ms, 9.04MB) +테스트 13 〉 통과 (0.71ms, 9.32MB) +테스트 14 〉 통과 (0.87ms, 9.32MB) +테스트 15 〉 통과 (0.08ms, 9.33MB) +테스트 16 〉 통과 (0.02ms, 9.13MB) +테스트 17 〉 통과 (0.02ms, 9.17MB) +테스트 18 〉 통과 (0.03ms, 9.23MB) +테스트 19 〉 통과 (0.02ms, 9.21MB) +테스트 20 〉 통과 (0.02ms, 9.13MB) +테스트 21 〉 통과 (0.02ms, 9.13MB) +테스트 22 〉 통과 (0.02ms, 9.33MB) +효율성 테스트 +테스트 1 〉 통과 (8.51ms, 9.79MB) +테스트 2 〉 통과 (9.77ms, 10.1MB) +테스트 3 〉 통과 (8.57ms, 9.85MB) +테스트 4 〉 통과 (9.97ms, 9.82MB) +테스트 5 〉 통과 (20.61ms, 9.67MB) +채점 결과 +정확성: 81.5 +효율성: 18.5 +합계: 100.0 / 100.0 +''' \ No newline at end of file diff --git "a/12\354\243\274\354\260\250/\353\254\270\354\240\2343/\353\260\225\353\257\274\354\204\234_\352\267\244\342\200\205\352\263\240\353\245\264\352\270\260.py" "b/12\354\243\274\354\260\250/\353\254\270\354\240\2343/\353\260\225\353\257\274\354\204\234_\352\267\244\342\200\205\352\263\240\353\245\264\352\270\260.py" new file mode 100644 index 0000000..1b74153 --- /dev/null +++ "b/12\354\243\274\354\260\250/\353\254\270\354\240\2343/\353\260\225\353\257\274\354\204\234_\352\267\244\342\200\205\352\263\240\353\245\264\352\270\260.py" @@ -0,0 +1,57 @@ +from collections import Counter + +def solution(k, tangerine): + answer = 0 # 서로 다른 종류가 최소이려면, 귤의 개수가 많은 종류부터 차례대로 담으면 됨 + + my_list = sorted(dict(Counter(tangerine)).items(), key=lambda x:-x[1]) + # [1, 3, 2, 5, 4, 5, 2, 3] -> [(3, 2), (2, 2), (5, 2), (1, 1), (4, 1)] + + temp = 0 # 귤 개수 담기 + for num in my_list: + temp += num[1] # 현재 귤 개수에 추가 + answer += 1 # 종류수 추가 + if temp >= k: # 귤 개수가 넘친다면? + break # 최소 종류만큼 넣은 것 + return answer + + +''' +정확성 테스트 +테스트 1 〉 통과 (6.59ms, 12.4MB) +테스트 2 〉 통과 (6.62ms, 12.4MB) +테스트 3 〉 통과 (6.91ms, 12.6MB) +테스트 4 〉 통과 (7.35ms, 12.2MB) +테스트 5 〉 통과 (8.19ms, 10.3MB) +테스트 6 〉 통과 (6.14ms, 10.4MB) +테스트 7 〉 통과 (7.07ms, 11.6MB) +테스트 8 〉 통과 (6.52ms, 11.1MB) +테스트 9 〉 통과 (6.11ms, 10.9MB) +테스트 10 〉 통과 (7.59ms, 12MB) +테스트 11 〉 통과 (0.03ms, 9.11MB) +테스트 12 〉 통과 (0.03ms, 9.2MB) +테스트 13 〉 통과 (0.03ms, 9.12MB) +테스트 14 〉 통과 (0.02ms, 9.36MB) +테스트 15 〉 통과 (0.04ms, 9.21MB) +테스트 16 〉 통과 (0.02ms, 9.3MB) +테스트 17 〉 통과 (0.03ms, 9.16MB) +테스트 18 〉 통과 (0.02ms, 9.21MB) +테스트 19 〉 통과 (0.02ms, 9.27MB) +테스트 20 〉 통과 (0.02ms, 9.3MB) +테스트 21 〉 통과 (0.09ms, 9.23MB) +테스트 22 〉 통과 (0.28ms, 9.36MB) +테스트 23 〉 통과 (0.31ms, 9.41MB) +테스트 24 〉 통과 (0.37ms, 9.52MB) +테스트 25 〉 통과 (3.60ms, 10.4MB) +테스트 26 〉 통과 (6.83ms, 11.6MB) +테스트 27 〉 통과 (48.60ms, 25.5MB) +테스트 28 〉 통과 (27.86ms, 17.6MB) +테스트 29 〉 통과 (56.39ms, 20.4MB) +테스트 30 〉 통과 (49.89ms, 25.7MB) +테스트 31 〉 통과 (8.08ms, 11.6MB) +테스트 32 〉 통과 (7.74ms, 13MB) +테스트 33 〉 통과 (35.44ms, 21.5MB) +테스트 34 〉 통과 (31.90ms, 20.5MB) +채점 결과 +정확성: 100.0 +합계: 100.0 / 100.0 +''' \ No newline at end of file diff --git "a/12\354\243\274\354\260\250/\353\254\270\354\240\2344/\353\260\225\353\257\274\354\204\234_\352\270\260\354\247\200\352\265\255\342\200\205\354\204\244\354\271\230.py" "b/12\354\243\274\354\260\250/\353\254\270\354\240\2344/\353\260\225\353\257\274\354\204\234_\352\270\260\354\247\200\352\265\255\342\200\205\354\204\244\354\271\230.py" new file mode 100644 index 0000000..da759d5 --- /dev/null +++ "b/12\354\243\274\354\260\250/\353\254\270\354\240\2344/\353\260\225\353\257\274\354\204\234_\352\270\260\354\247\200\352\265\255\342\200\205\354\204\244\354\271\230.py" @@ -0,0 +1,170 @@ +# 처음 풀이 +def solution(n, stations, w): + answer = 0 + + my_list = ['0' for _ in range(n)] + + for station in stations: + station_idx = station - 1 + my_list[station_idx] = '1' + for _w in range(1, w + 1): + if station_idx + _w < len(my_list): + my_list[station_idx + _w] = '1' + if station_idx - _w < len(my_list): + my_list[station_idx - _w] = '1' + no_elec = "".join(my_list).split("1") + no_elec_length = [len(zero) for zero in no_elec if len(zero) > 0] + + answer = sum([l // (2 * w + 1) if l % (2 * w + 1) == 0 else l // (2 * w + 1) + 1 for l in no_elec_length]) + return answer +# 전파 받을 수 있으면 1, 아니면 0으로, +# 1로 split 해주면 연속적인 0의 개수가 남으니 다 더하면 될거라 생각 + +''' +정확성 테스트 +테스트 1 〉 실패 (0.01ms, 9.3MB) +테스트 2 〉 통과 (0.01ms, 9.29MB) +테스트 3 〉 통과 (0.01ms, 9.27MB) +테스트 4 〉 통과 (0.01ms, 9.17MB) +테스트 5 〉 통과 (0.01ms, 9.29MB) +테스트 6 〉 통과 (0.01ms, 9.17MB) +테스트 7 〉 통과 (0.01ms, 9.23MB) +테스트 8 〉 통과 (0.01ms, 9.31MB) +테스트 9 〉 통과 (0.01ms, 9.27MB) +테스트 10 〉 통과 (0.01ms, 9.27MB) +테스트 11 〉 통과 (0.01ms, 9.38MB) +테스트 12 〉 통과 (0.01ms, 9.3MB) +테스트 13 〉 통과 (0.01ms, 9.27MB) +테스트 14 〉 통과 (0.01ms, 9.28MB) +테스트 15 〉 통과 (0.01ms, 9.27MB) +테스트 16 〉 통과 (0.03ms, 9.26MB) +테스트 17 〉 통과 (0.03ms, 9.23MB) +테스트 18 〉 통과 (0.02ms, 9.27MB) +테스트 19 〉 통과 (0.03ms, 9.27MB) +테스트 20 〉 통과 (0.02ms, 9.26MB) +테스트 21 〉 통과 (0.08ms, 9.27MB) +효율성 테스트 +테스트 1 〉 실패 (시간 초과) +테스트 2 〉 실패 (시간 초과) +테스트 3 〉 실패 (시간 초과) +테스트 4 〉 실패 (시간 초과) +채점 결과 +정확성: 67.1 +효율성: 0.0 +합계: 67.1 / 100.0 +''' + +# 다른 풀이 +def solution(n, stations, w): + answer = 0 + + my_list = [0 for _ in range(n)] + + for station in stations: + left = max(0, station - 1 - w) + right = min(n - 1, station - 1 + w) + for i in range(left, right + 1): + my_list[i] = 1 + + count_zero = 0 + for i in range(n): + if my_list[i] == 0: + count_zero += 1 + else: + answer += count_zero // (2 * w + 1) if count_zero % (2 * w + 1) == 0 else count_zero // (2 * w + 1) + 1 + count_zero = 0 + if count_zero > 0: + answer += count_zero // (2 * w + 1) if count_zero % (2 * w + 1) == 0 else count_zero // (2 * w + 1) + 1 + return answer +# 똑같이 전파 배열 만들어주고 +# 앞에서부터 세면서 연속적인 0의 개수를 세고 전파 범위로 나누어 계산 +''' +정확성 테스트 +테스트 1 〉 통과 (0.01ms, 9.18MB) +테스트 2 〉 통과 (0.01ms, 9.28MB) +테스트 3 〉 통과 (0.01ms, 9.08MB) +테스트 4 〉 통과 (0.01ms, 9.25MB) +테스트 5 〉 통과 (0.02ms, 9.19MB) +테스트 6 〉 통과 (0.01ms, 9.21MB) +테스트 7 〉 통과 (0.01ms, 9.28MB) +테스트 8 〉 통과 (0.01ms, 9.19MB) +테스트 9 〉 통과 (0.01ms, 9.11MB) +테스트 10 〉 통과 (0.01ms, 9.2MB) +테스트 11 〉 통과 (0.01ms, 9.2MB) +테스트 12 〉 통과 (0.01ms, 9.1MB) +테스트 13 〉 통과 (0.02ms, 9.28MB) +테스트 14 〉 통과 (0.01ms, 9.09MB) +테스트 15 〉 통과 (0.01ms, 9.24MB) +테스트 16 〉 통과 (0.03ms, 9.14MB) +테스트 17 〉 통과 (0.02ms, 9.08MB) +테스트 18 〉 통과 (0.02ms, 9.12MB) +테스트 19 〉 통과 (0.03ms, 9.13MB) +테스트 20 〉 통과 (0.02ms, 9.1MB) +테스트 21 〉 통과 (0.05ms, 9.22MB) +효율성 테스트 +테스트 1 〉 실패 (시간 초과) +테스트 2 〉 실패 (시간 초과) +테스트 3 〉 실패 (시간 초과) +테스트 4 〉 실패 (시간 초과) +채점 결과 +정확성: 70.5 +효율성: 0.0 +합계: 70.5 / 100.0 +''' + + +def solution(n, stations, w): + answer = 0 + cur_idx = 0 + RANGE = 2 * w + 1 + for station in stations: + left = max(0, station - 1 - w) + right = min(n - 1, station - 1 + w) + if cur_idx < left: + no_elec = left - cur_idx + answer += no_elec // RANGE if no_elec % RANGE == 0 else no_elec // RANGE + 1 + cur_idx = right + 1 + if cur_idx < n: + no_elec = n - cur_idx + answer += no_elec // RANGE if no_elec % RANGE == 0 else no_elec // RANGE + 1 + return answer + +# 위의 작업들을 동시에 수행 +# 기지국 위치가 오름차순으로 정렬되어 있으니 +# 기지국 마다 전파 범위의 가장 왼쪽을 구하고, +# 현재 위치와 가장 왼쪽의 index의 차이가 연속적인 0의 개수로 계산할 수 있음 +# 기지국 마다 계산하니 시간초과 해결 + +''' +정확성 테스트 +테스트 1 〉 통과 (0.00ms, 9.19MB) +테스트 2 〉 통과 (0.00ms, 9.24MB) +테스트 3 〉 통과 (0.00ms, 9.34MB) +테스트 4 〉 통과 (0.00ms, 9.21MB) +테스트 5 〉 통과 (0.01ms, 9.34MB) +테스트 6 〉 통과 (0.00ms, 9.26MB) +테스트 7 〉 통과 (0.00ms, 9.23MB) +테스트 8 〉 통과 (0.01ms, 9.2MB) +테스트 9 〉 통과 (0.00ms, 9.34MB) +테스트 10 〉 통과 (0.00ms, 9.27MB) +테스트 11 〉 통과 (0.00ms, 9.27MB) +테스트 12 〉 통과 (0.01ms, 9.27MB) +테스트 13 〉 통과 (0.01ms, 9.27MB) +테스트 14 〉 통과 (0.00ms, 9.26MB) +테스트 15 〉 통과 (0.00ms, 9.25MB) +테스트 16 〉 통과 (0.01ms, 9.23MB) +테스트 17 〉 통과 (0.01ms, 9.21MB) +테스트 18 〉 통과 (0.01ms, 9.34MB) +테스트 19 〉 통과 (0.01ms, 9.14MB) +테스트 20 〉 통과 (0.00ms, 9.2MB) +테스트 21 〉 통과 (0.02ms, 9.12MB) +효율성 테스트 +테스트 1 〉 통과 (4.29ms, 9.53MB) +테스트 2 〉 통과 (4.44ms, 9.53MB) +테스트 3 〉 통과 (4.44ms, 9.61MB) +테스트 4 〉 통과 (4.43ms, 9.61MB) +채점 결과 +정확성: 70.5 +효율성: 29.5 +합계: 100.0 / 100.0 +''' \ No newline at end of file