SWEA (SW Expert Academy)/D3

[SWEA/D3] 14361 숫자가 같은 배수

2023. 3. 19. 19:49

문제 바로가기

 

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
'SWEA (SW Expert Academy)/D3' 카테고리의 다른 글
  • [SWEA/D3] 13547 팔씨름
  • [SWEA/D3] 13732 정사각형 판정 (2시간 풀고 Pass..) / BFS, 이중 for문 한줄로 작성하기
  • [SWEA/D3] 15612 체스판 위의 룩 위치
  • [SWEA/D3] 15758 무한 문자열
hellosonic
hellosonic
hellosonic
꾸준함
hellosonic
전체
오늘
어제
  • 분류 전체보기 (285)
    • SSAFY (4)
    • 프로그래머스 데브코스 (26)
    • Diary (1)
    • JavaScript (20)
    • ToyPJ (13)
      • Python-Django (13)
    • CS지식 (11)
      • 자료구조 (5)
      • 개발 상식 (2)
      • 네트워크 (4)
    • Baekjoon (141)
      • IM Level (57)
      • DFS와 BFS (21)
      • 백트래킹 (21)
      • DP (3)
      • 이분탐색 (4)
      • 구현 (14)
    • Programmers (13)
      • Lv1 (4)
      • Lv2 (9)
    • SWEA (SW Expert Academy) (52)
      • D1 (5)
      • D2 (7)
      • D3 (40)
    • 이코테 (4)
    • Grammar (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기
  • 관리자

공지사항

인기 글

태그

  • SWEA 파이썬
  • SWEA/D3
  • 국비지원교육
  • 리액트 todolist
  • 파이썬 11478
  • 파이썬 1269
  • 구현
  • 백준
  • 코딩부트캠프
  • 자바스크립트
  • 파이썬 1946
  • SWEA
  • 백준 5212
  • SWEA D2
  • 파이썬
  • 프로그래머스 데브코스
  • 그리디
  • JS
  • SWEA D3
  • 파이썬 2529
  • 프론트엔드 데브코스
  • javascript ux
  • 백준 2999
  • 백준 14891
  • 자바스크립트 기본기
  • 백준 1157
  • 이코테
  • 백준 18870
  • 파이썬 1436
  • 프로그래머스

최근 댓글

최근 글

hELLO · Designed By 정상우.
hellosonic
[SWEA/D3] 14361 숫자가 같은 배수
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.