From 02e6ad41ced16ec24e7e971aecd6ba13ac0a0e21 Mon Sep 17 00:00:00 2001 From: Sumin Date: Wed, 6 Sep 2023 11:13:26 +0900 Subject: [PATCH 1/3] =?UTF-8?q?Create=20n=EC=A7=84=EC=88=98=20=EA=B2=8C?= =?UTF-8?q?=EC=9E=84=20sumin.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sumin.py" | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 "Programmers/n\354\247\204\354\210\230 \352\262\214\354\236\204/sumin.py" diff --git "a/Programmers/n\354\247\204\354\210\230 \352\262\214\354\236\204/sumin.py" "b/Programmers/n\354\247\204\354\210\230 \352\262\214\354\236\204/sumin.py" new file mode 100644 index 00000000..0953a441 --- /dev/null +++ "b/Programmers/n\354\247\204\354\210\230 \352\262\214\354\236\204/sumin.py" @@ -0,0 +1,78 @@ +""" +풀이시간: 10분 + + +진법 n, 미리 구할 숫자의 갯수 t, 게임에 참가하는 인원 m, 튜브의 순서 p 가 주어진다. +- n: 진법 (2 ≦ n ≦ 16) +- t: 미리 구할 숫자의 갯수 (0 < t ≦ 1000) +- m: 게임에 참가하는 인원 (2 ≦ m ≦ 100) +- p: 튜브의 순서 (1 ≦ p ≦ m) + + +1. 변환한 숫자를 모두 합친 문자열의 길이가 t * m가 될 때까지 순서대로 숫자를 n진수로 변환해 추가해준다. +2. 문자열을 순회하며 튜브의 순서가 되는 문자열을 ans에 추가한다. + +<시간복잡도> +O(t*m) +""" + +def convert(number, base): + """ + number: 변환할 숫자(10진수) + base: 변환할 진수 + """ + nums = '0123456789ABCDEF' + q, r = divmod(number, base) + if q == 0: + return nums[r] + else: + return convert(q, base) + nums[r] + +def solution(n, t, m, p) -> str: + """ + n: 변환할 진법 + t: 미리 구할 숫자의 개수 + m: 게임에 참가하는 인원 + p: 튜브의 순서 + """ + ans = '' + tmp = '' + i = 0 + + # 필요한 숫자를 미리 계산하여 tmp에 저장 + while len(tmp) < t * m: + tmp += convert(i, n) + i += 1 + for i in range(p-1, t*m, m): # 튜브의 차례에 해당하는 숫자 answer에 추가 + ans += tmp[i] + return ans + +""" +정확성 테스트 +테스트 1 〉 통과 (0.01ms, 10.2MB) +테스트 2 〉 통과 (0.02ms, 10.1MB) +테스트 3 〉 통과 (0.01ms, 10.2MB) +테스트 4 〉 통과 (0.04ms, 10.1MB) +테스트 5 〉 통과 (0.11ms, 10.2MB) +테스트 6 〉 통과 (0.11ms, 10.4MB) +테스트 7 〉 통과 (0.20ms, 10.1MB) +테스트 8 〉 통과 (0.19ms, 10.1MB) +테스트 9 〉 통과 (0.12ms, 10.4MB) +테스트 10 〉 통과 (0.12ms, 10.2MB) +테스트 11 〉 통과 (0.25ms, 10.4MB) +테스트 12 〉 통과 (0.16ms, 10.2MB) +테스트 13 〉 통과 (0.23ms, 10.2MB) +테스트 14 〉 통과 (30.37ms, 10.3MB) +테스트 15 〉 통과 (30.82ms, 10.1MB) +테스트 16 〉 통과 (44.68ms, 10.2MB) +테스트 17 〉 통과 (1.73ms, 10.2MB) +테스트 18 〉 통과 (1.33ms, 10.2MB) +테스트 19 〉 통과 (0.36ms, 10.1MB) +테스트 20 〉 통과 (0.97ms, 10.2MB) +테스트 21 〉 통과 (11.80ms, 10.3MB) +테스트 22 〉 통과 (3.35ms, 10.2MB) +테스트 23 〉 통과 (9.12ms, 10.2MB) +테스트 24 〉 통과 (13.02ms, 10.2MB) +테스트 25 〉 통과 (18.35ms, 10.2MB) +테스트 26 〉 통과 (3.71ms, 10.1MB) +""" From 0ebfd9ddcec04bff48089537340f7f66e1ebeb0f Mon Sep 17 00:00:00 2001 From: Sumin Date: Wed, 6 Sep 2023 13:33:43 +0900 Subject: [PATCH 2/3] refactor : refactor code & add comment --- .../sumin.py" | 74 +++++++++---------- 1 file changed, 36 insertions(+), 38 deletions(-) diff --git "a/Programmers/n\354\247\204\354\210\230 \352\262\214\354\236\204/sumin.py" "b/Programmers/n\354\247\204\354\210\230 \352\262\214\354\236\204/sumin.py" index 0953a441..0260efa8 100644 --- "a/Programmers/n\354\247\204\354\210\230 \352\262\214\354\236\204/sumin.py" +++ "b/Programmers/n\354\247\204\354\210\230 \352\262\214\354\236\204/sumin.py" @@ -16,63 +16,61 @@ O(t*m) """ -def convert(number, base): +# number(10진수)를 base진수로 변환하는 함수 +def convert(number: int, base: int) -> str: """ number: 변환할 숫자(10진수) base: 변환할 진수 """ nums = '0123456789ABCDEF' - q, r = divmod(number, base) + q, r = divmod(number, base) # 몫, 나머지 if q == 0: return nums[r] else: return convert(q, base) + nums[r] -def solution(n, t, m, p) -> str: +def solution(n: int, t: int, m: int, p: int) -> str: """ n: 변환할 진법 t: 미리 구할 숫자의 개수 m: 게임에 참가하는 인원 p: 튜브의 순서 """ - ans = '' - tmp = '' - i = 0 + converted_nums = '' + i = 0 # 숫자는 0부터 시작 - # 필요한 숫자를 미리 계산하여 tmp에 저장 - while len(tmp) < t * m: - tmp += convert(i, n) + # 필요한 숫자를 미리 변환하여 converted_nums에 저장 + while len(converted_nums) < t * m: + converted_nums += convert(i, n) # i를 n진수로 변환 i += 1 - for i in range(p-1, t*m, m): # 튜브의 차례에 해당하는 숫자 answer에 추가 - ans += tmp[i] - return ans + return converted_nums[p-1:t*m:m] # 튜브의 순서가 돌아올 때마다 출력 """ 정확성 테스트 -테스트 1 〉 통과 (0.01ms, 10.2MB) -테스트 2 〉 통과 (0.02ms, 10.1MB) -테스트 3 〉 통과 (0.01ms, 10.2MB) -테스트 4 〉 통과 (0.04ms, 10.1MB) -테스트 5 〉 통과 (0.11ms, 10.2MB) -테스트 6 〉 통과 (0.11ms, 10.4MB) -테스트 7 〉 통과 (0.20ms, 10.1MB) -테스트 8 〉 통과 (0.19ms, 10.1MB) -테스트 9 〉 통과 (0.12ms, 10.4MB) -테스트 10 〉 통과 (0.12ms, 10.2MB) -테스트 11 〉 통과 (0.25ms, 10.4MB) -테스트 12 〉 통과 (0.16ms, 10.2MB) +테스트 1 〉 통과 (0.01ms, 10.1MB) +테스트 2 〉 통과 (0.01ms, 10.1MB) +테스트 3 〉 통과 (0.03ms, 10.1MB) +테스트 4 〉 통과 (0.02ms, 10MB) +테스트 5 〉 통과 (0.11ms, 10.1MB) +테스트 6 〉 통과 (0.12ms, 10.2MB) +테스트 7 〉 통과 (0.12ms, 10.2MB) +테스트 8 〉 통과 (0.12ms, 10MB) +테스트 9 〉 통과 (0.12ms, 10.1MB) +테스트 10 〉 통과 (0.12ms, 10.3MB) +테스트 11 〉 통과 (0.13ms, 10.1MB) +테스트 12 〉 통과 (0.13ms, 10.2MB) 테스트 13 〉 통과 (0.23ms, 10.2MB) -테스트 14 〉 통과 (30.37ms, 10.3MB) -테스트 15 〉 통과 (30.82ms, 10.1MB) -테스트 16 〉 통과 (44.68ms, 10.2MB) -테스트 17 〉 통과 (1.73ms, 10.2MB) -테스트 18 〉 통과 (1.33ms, 10.2MB) -테스트 19 〉 통과 (0.36ms, 10.1MB) -테스트 20 〉 통과 (0.97ms, 10.2MB) -테스트 21 〉 통과 (11.80ms, 10.3MB) -테스트 22 〉 통과 (3.35ms, 10.2MB) -테스트 23 〉 통과 (9.12ms, 10.2MB) -테스트 24 〉 통과 (13.02ms, 10.2MB) -테스트 25 〉 통과 (18.35ms, 10.2MB) -테스트 26 〉 통과 (3.71ms, 10.1MB) -""" +테스트 14 〉 통과 (25.40ms, 10.4MB) +테스트 15 〉 통과 (25.76ms, 10.4MB) +테스트 16 〉 통과 (24.76ms, 10.1MB) +테스트 17 〉 통과 (2.01ms, 10.1MB) +테스트 18 〉 통과 (1.22ms, 10.3MB) +테스트 19 〉 통과 (0.34ms, 10.2MB) +테스트 20 〉 통과 (1.03ms, 10MB) +테스트 21 〉 통과 (6.36ms, 10.1MB) +테스트 22 〉 통과 (2.70ms, 10.2MB) +테스트 23 〉 통과 (8.83ms, 10.2MB) +테스트 24 〉 통과 (13.03ms, 10.2MB) +테스트 25 〉 통과 (10.28ms, 10.3MB) +테스트 26 〉 통과 (4.47ms, 10.2MB) +""" \ No newline at end of file From 788ecbf38b3323e293b9226b7f3693c156952a22 Mon Sep 17 00:00:00 2001 From: Sumin Date: Wed, 6 Sep 2023 13:41:30 +0900 Subject: [PATCH 3/3] comment : modify comment --- .../sumin.py" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/Programmers/n\354\247\204\354\210\230 \352\262\214\354\236\204/sumin.py" "b/Programmers/n\354\247\204\354\210\230 \352\262\214\354\236\204/sumin.py" index 0260efa8..34edc413 100644 --- "a/Programmers/n\354\247\204\354\210\230 \352\262\214\354\236\204/sumin.py" +++ "b/Programmers/n\354\247\204\354\210\230 \352\262\214\354\236\204/sumin.py" @@ -10,7 +10,7 @@ 1. 변환한 숫자를 모두 합친 문자열의 길이가 t * m가 될 때까지 순서대로 숫자를 n진수로 변환해 추가해준다. -2. 문자열을 순회하며 튜브의 순서가 되는 문자열을 ans에 추가한다. +2. 변환된 숫자(문자열)에서 튜브의 순서가 돌아올 때마다의 값을 출력한다. <시간복잡도> O(t*m)