문제 바로가기
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
나의 코드 및 설명
- 어떤 자연수를 입력 받고, 그 자연수의 각 자릿수 숫자를 요소로 하는 리스트를 생성한다.
문제에서 요구하는 어떤 자연수의 배수 중 나올 수 있는 가장 큰 수는, <어떤 자연수 * 각 자릿수의 숫자 중 가장 큰 수>와 같다. 예를들어, 142857에서 나올 수 있는 가장 큰 배수는 <142857 * <8>> 이다. 이 때, PASS를 받기 위해선 어떤 자연수의 배수의 길이가 어떤 자연수의 길이와 같지 않다면 그 배수는 따지지 않는 코드를 작성해야 한다. 이것을 작성해주지 않는다면 108개의 TC에서 107개의 TC만 맞아서 Failed 처리가 된다.
이렇게 구할 수 있는 어떤 자연수의 배수 리스트의 요소와 원래 입력받는 숫자 리스트의 요소를 서로 비교하여, 배수 리스트에 숫자가 있다면 remove() 함수를 통해 입력받은 숫자 리스트의 요소를 하나씩 제거하면서 리스트의 길이가 0이 된다면 ans에 1을 저장한 후 "possible"을 출력하고, 모든 반복문을 돌았는데도 ans에 1이 저장되어 있지 않다면 "impossible"을 출력한다.
t = int(input())
for test_case in range(1, t+1):
#숫자 입력
num = int(input())
#입력한 숫자를 리스트로 저장
num_list = list(map(int, str(num)))
#입력한 숫자의 배수를 입력한 숫자에서 빼주면서 비교할 것이므로, 비교할 사본 리스트 생성
copy_num_list = num_list
ans = 0
#2부터 입력한 숫자 자릿수 중 최대값까지 곱해봄
for i in range(2, max(num_list)+1):
#입력한 숫자의 배수 (x2부터 시작)
temp_num = num * i
temp_num_list = list(map(int, str(temp_num))) #285714
#만약 입력한 숫자의 배수가 입력한 숫자의 자릿수와 달라지면 넘어간다.
if len(temp_num_list) != len(copy_num_list):
continue
#숫자의 배수의 자릿수
cnt = len(temp_num_list)
#숫자의 배수의 자릿수를 하나씩 비교해보는 for문 작성
for j in range(len(temp_num_list)):
#만약, 숫자의 배수의 자릿수가, 기존 입력한 숫자에 있는 숫자라면
if temp_num_list[j] in copy_num_list:
#cnt를 하나 빼준다.
cnt -= 1
#기존 입력한 숫자에 없는 숫자라면
else:
#넘어간다.
continue
#cnt = 0 즉, 숫자의 배수의 자릿수의 숫자가 기존 입력한 숫자에 다 있다면
if cnt == 0:
#ans에 1을 저장한다.
ans = 1
#그리고 반복문(배수를 하나하나 살펴보는 반복문)을 탈출한다.(뒤에거는 볼 필요도 없기 때문에)
break
#그렇지 않다면 계속해서 반복문을 수행한다.
else:
continue
#만약 ans에 1이 저장되어 있다면,
if ans == 1:
print("#{} {}".format(test_case, "possible"))
#가능한 모든 배수를 살펴보았는데도 ans에 1이 저장되지 않았다면,
else:
print("#{} {}".format(test_case, "impossible"))
피드백
구현하는데에 약 한 시간 정도 소요되었다. 머릿속에 있는 것을 코드를 작성하면서 구현할 때 아직도 너무 헷갈린다. 특히 여러 개의 반복문을 사용할 경우에는 더더욱 헷갈리는 것 같다. 많이 연습하게 된다면 숙달이 될 것이라 믿는다. 어쨋든, 문제를 해결하여 기분이 좋다.
'SWEA (SW Expert Academy) > D3' 카테고리의 다른 글
[SWEA/D3] 13547 팔씨름 (0) | 2023.03.26 |
---|---|
[SWEA/D3] 13732 정사각형 판정 (2시간 풀고 Pass..) / BFS, 이중 for문 한줄로 작성하기 (0) | 2023.03.26 |
[SWEA/D3] 15612 체스판 위의 룩 위치 (0) | 2023.03.19 |
[SWEA/D3] 15758 무한 문자열 (0) | 2023.03.17 |
[SWEA/D3] 16002 합성수 방정식 (0) | 2023.03.17 |
문제 바로가기
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
나의 코드 및 설명
- 어떤 자연수를 입력 받고, 그 자연수의 각 자릿수 숫자를 요소로 하는 리스트를 생성한다.
문제에서 요구하는 어떤 자연수의 배수 중 나올 수 있는 가장 큰 수는, <어떤 자연수 * 각 자릿수의 숫자 중 가장 큰 수>와 같다. 예를들어, 142857에서 나올 수 있는 가장 큰 배수는 <142857 * <8>> 이다. 이 때, PASS를 받기 위해선 어떤 자연수의 배수의 길이가 어떤 자연수의 길이와 같지 않다면 그 배수는 따지지 않는 코드를 작성해야 한다. 이것을 작성해주지 않는다면 108개의 TC에서 107개의 TC만 맞아서 Failed 처리가 된다.
이렇게 구할 수 있는 어떤 자연수의 배수 리스트의 요소와 원래 입력받는 숫자 리스트의 요소를 서로 비교하여, 배수 리스트에 숫자가 있다면 remove() 함수를 통해 입력받은 숫자 리스트의 요소를 하나씩 제거하면서 리스트의 길이가 0이 된다면 ans에 1을 저장한 후 "possible"을 출력하고, 모든 반복문을 돌았는데도 ans에 1이 저장되어 있지 않다면 "impossible"을 출력한다.
t = int(input())
for test_case in range(1, t+1):
#숫자 입력
num = int(input())
#입력한 숫자를 리스트로 저장
num_list = list(map(int, str(num)))
#입력한 숫자의 배수를 입력한 숫자에서 빼주면서 비교할 것이므로, 비교할 사본 리스트 생성
copy_num_list = num_list
ans = 0
#2부터 입력한 숫자 자릿수 중 최대값까지 곱해봄
for i in range(2, max(num_list)+1):
#입력한 숫자의 배수 (x2부터 시작)
temp_num = num * i
temp_num_list = list(map(int, str(temp_num))) #285714
#만약 입력한 숫자의 배수가 입력한 숫자의 자릿수와 달라지면 넘어간다.
if len(temp_num_list) != len(copy_num_list):
continue
#숫자의 배수의 자릿수
cnt = len(temp_num_list)
#숫자의 배수의 자릿수를 하나씩 비교해보는 for문 작성
for j in range(len(temp_num_list)):
#만약, 숫자의 배수의 자릿수가, 기존 입력한 숫자에 있는 숫자라면
if temp_num_list[j] in copy_num_list:
#cnt를 하나 빼준다.
cnt -= 1
#기존 입력한 숫자에 없는 숫자라면
else:
#넘어간다.
continue
#cnt = 0 즉, 숫자의 배수의 자릿수의 숫자가 기존 입력한 숫자에 다 있다면
if cnt == 0:
#ans에 1을 저장한다.
ans = 1
#그리고 반복문(배수를 하나하나 살펴보는 반복문)을 탈출한다.(뒤에거는 볼 필요도 없기 때문에)
break
#그렇지 않다면 계속해서 반복문을 수행한다.
else:
continue
#만약 ans에 1이 저장되어 있다면,
if ans == 1:
print("#{} {}".format(test_case, "possible"))
#가능한 모든 배수를 살펴보았는데도 ans에 1이 저장되지 않았다면,
else:
print("#{} {}".format(test_case, "impossible"))
피드백
구현하는데에 약 한 시간 정도 소요되었다. 머릿속에 있는 것을 코드를 작성하면서 구현할 때 아직도 너무 헷갈린다. 특히 여러 개의 반복문을 사용할 경우에는 더더욱 헷갈리는 것 같다. 많이 연습하게 된다면 숙달이 될 것이라 믿는다. 어쨋든, 문제를 해결하여 기분이 좋다.
'SWEA (SW Expert Academy) > D3' 카테고리의 다른 글
[SWEA/D3] 13547 팔씨름 (0) | 2023.03.26 |
---|---|
[SWEA/D3] 13732 정사각형 판정 (2시간 풀고 Pass..) / BFS, 이중 for문 한줄로 작성하기 (0) | 2023.03.26 |
[SWEA/D3] 15612 체스판 위의 룩 위치 (0) | 2023.03.19 |
[SWEA/D3] 15758 무한 문자열 (0) | 2023.03.17 |
[SWEA/D3] 16002 합성수 방정식 (0) | 2023.03.17 |