[문제 링크] 👉 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5Pl0Q6ANQDFAUq
설명
숫자 N은 아래와 같다.
N이 주어질 때 a, b, c, d, e 를 출력하라.
풀이
sol.1
a, b, c, d, e를 담을 배열을 생성한다.
index = [0]*5
숫자가 1이 될 때까지 즉, 다 나눠질 때까지 반복한다.
while num > 1:
if num % 2 == 0:
num //= 2
index[0] += 1
elif num % 3 == 0:
num //= 3
index[1] += 1
...
- 2로 나눈 나머지가 0일 때(2로 나눠질 때) 몫을 num에 저장한다.
- 첫 번째 인덱스에 1을 증가시킨다.
- 2로 나뉘어지지 않으면 3으로 나뉘어지는지 확인한다.
- 3으로 나뉘어지면 몫을 num에 저장하고, 두 번째 인덱스에 1을 증가시킨다.
- 이렇게 11까지 확인하고, 더 이상 나뉘어지지 않을 때까지 반복한다.
sol.2
배열에 나눌 값을 미리 저장한다. 그리고 결과를 담을 리스트도 생성한다.
index = [2, 3, 5, 7, 11]
result = [0]*5
위에서 생성한 리스트를 활용
for i in range(5):
while num % index[i] == 0:
result[i] += 1
num //= index[i]
- 먼저, 첫 번째 인덱스, 숫자가 2로 나뉘어질 때까지 반복한다.
- 나뉘지면 result 첫 번쩨 인덱스에 1을 증가하고, 2로 나눈 몫을 num에 다시 저장한다.
- 그 다음 인덱스, 숫자가 3으로 나뉘어질 때까지 반복한다.
- 나뉘지면 result 두 번쩨 인덱스에 1을 증가하고, 3으로 나눈 몫을 num에 다시 저장한다.
- 이렇게 마지막 인덱스까지 확인한다.
Solution
sol.1
test_case = int(input())
for t in range(1, test_case + 1):
num = int(input())
index = [0]*5
while num > 1:
if num % 2 == 0:
num //= 2
index[0] += 1
elif num % 3 == 0:
num //= 3
index[1] += 1
elif num % 5 == 0:
num //= 5
index[2] += 1
elif num % 7 == 0:
num //= 7
index[3] += 1
elif num % 11 == 0:
num //= 11
index[4] += 1
print("#%d" %t, end=' ')
for i in index:
print(i, end=' ')
print()
sol.2
test_case = int(input())
for t in range(1, test_case + 1):
num = int(input())
index = [2, 3, 5, 7, 11]
result = [0]*5
for i in range(5):
while num % index[i] == 0:
result[i] += 1
num //= index[i]
print(f'#{t}', *result)
👩💻 회고
출력할 때 출력 형식을 좀 더 활용하자.
print(f'#{t}', *result)
'SWEA' 카테고리의 다른 글
[SWEA] 1976. 시각 덧셈 (Python/D2) (0) | 2024.10.16 |
---|---|
[SWEA] 1284. 수도 요금 경쟁 (Python/D2) (4) | 2024.10.16 |
[SWEA] 21425. += (Python/D2) (0) | 2024.10.16 |
[SWEA] 5162. 두가지 빵의 딜레마 (Python/D2) (2) | 2023.11.19 |
[SWEA] 4466. 최대 성적표 만들기 (Python/D2) (1) | 2023.11.19 |