[SW Expert Academy] 1926.간단한 369게임 (D2)

Soorim Yoon·2022년 9월 23일
0

문제

  • 문제의 출처는 SW Expert Academy입니다.

문제 보기

  • 1부터 N까지의 숫자 중 3, 6, 9가 들어가는 숫자는 - 표시를, 들어가지 않는 숫자는 해당 숫자를 출력한다.
  • 3, 6, 9가 여러 번 들어가는 숫자의 경우, 3, 6, 9가 들어가는 숫자만큼 -를 출력한다.
    ex) 3는 -, 36은 --, 12는 12의 형태로 값을 출력한다.

풀이

  • 각 자리가 3, 6, 9 중 하나인지 파악하기 위해 나머지 연산을 사용했다. test_case를 10으로 나눈 나머지가 3 또는 6 또는 9 중 하나인지 파악한 후, 맞다면 yes 변수의 값을 1 증가, 아니면 no 변수의 값을 1 증가시킨다.
  • 이 때 3, 6, 9 중 하나인지 파악하고자 처음에는 3으로 나눈 나머지가 0이면 yes 변수 값을 증가하는 방식을 취했지만, 이 방법은 0, 1, 2인 경우에도 나머지가 0이 되어 값이 증가되는 문제가 있었다.
  • 따라서 직관적으로 x가 3 또는 6 또는 9인 경우 yes 변수 값을 증가시키는 방식을 취했다.
  • 마지막 자리까지 판별이 끝나면 yes 변수 값이 0인 경우, 해당 숫자를 answer 문자열에 더하도록 한다. yes 변수 값이 1 이상인 경우 해당 값만큼 - 문자를 answer 배열에 추가한다. - 문자가 여러 개 추가되는 경우 띄어쓰기는 진행하지 않고 문자열에 추가한다.
  • 각 숫자 사이에 공백을 추가한다.

코드

T = int(input())
answer = ''
for test_case in range(1, T + 1):
    now = test_case
    yes = 0			# 각 자리수가 3, 6, 9 숫자인 경우를 개수를 셈
    no = 0			# 각 자리수가 3, 6, 9를 제외한 숫자인 경우를 셈
    while test_case >= 1:		# test_case / 10의 결과가 소수로 나타날 때 종료
        x = test_case % 10		# test_case 값의 마지막 자리 값을 파악하기
        if x == 3 or x == 6 or x == 9:
            yes += 1
        else:
            no += 1
        test_case = test_case // 10		# 몫 연산을 통해 다음 연산할 숫자를 갱신함
        
    if yes == 0:		# 3, 6, 9가 한번도 들어가지 않은 숫자인 경우
        answer += str(now)
    else:				# 3, 6, 9가 들어간 숫자인 경우 개수만큼 -를 더함
        answer += str("-"*yes)
    answer += " "
    
print(answer)  

실행 결과

💡 느낀점

SW Expert Academy의 문제는 처음 풀어보는 거라 개발환경이 아직 익숙하지는 않지만, 앞으로 더 많이 풀면서 익숙해지도록 노력해야겠다.

profile
👩🏻‍💻 AI를 좋아하는 IT학부생

0개의 댓글