Stay Hungry Stay Foolish

SWEA

[SWEA] 1926. 간단한 369게임 (Python/D2)

dev스카이 2023. 11. 7. 20:08
 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


설명

369 게임이다. 3,6,9가 한 번 들어가면 -를 출력하고 3,6,9가 두 개 이상일 때는 -를 횟수에 맞게 출력한다.

 

풀이

단순 구현 문제이다

1. n만큼 반복문을 돌린다.

2. 반복문에서 꺼낸 정수를 분리하고 리스트에 저장한다.

3. 정수를 분리한 리스트에 3, 6, 9가 들어가 있으면, 카운터 함수를 사용해 개수를 센다.

4. 카운트 한 리스트에서 key값이 3, 6, 9인 것만 value값을 결과값에 저장한다.

5. 결과값 개수만큼 '-'를 출력한다.

6. 3,6,9가 들어가 있지 않은 수는 그대로 출력한다.

 

다른 풀이

1. 리스트에 3, 6, 9를 따로 저장한다.

2. n만큼 반복문을 돌린다.

3. 반복문에서 꺼낸 정수를 문자형으로 변환하고 반복문을 이용해 하나씩 꺼낸다.

4. 꺼낸 문자가 3, 6, 9가 저장된 리스트에 있는 것과 같다면 +1씩 카운트를 한다.

5. 반복문을 통해 확인이 끝났으면 카운트 값이 0인것과 아닌 것을 판단한다.

6. 카운트 값이 1이상이면 카운트 개수만큼 '-'를 곱해서 저장한다.

7. 마지막으로  출력한다.

 

 

Solution

from collections import Counter
n = int(input())
num = []
for i in range(1, n+1):
    num = list(map(int, str(i)))  #정수 분리, 리스트로 감싸줘야 함 안 그러면 map object 나옴
    if 3 in num or 6 in num or 9 in num: 
        cnt = 0
        count_num = Counter(num) #카운터 함수를 사용해 개수 세기
        for key, value in count_num.items():
            if key == 3 or key == 6 or key == 9: 
                cnt += value #개수 저장
        print('-'*cnt, end=" ")
    else:
        print(i, end=" ") #369 아닌 건 출력

 

다른 풀이

n = int(input())
clap = ['3', '6', '9']

for i in range(1, n+1):
    cnt = 0
    for j in str(i): #정수를 문자형으로 변환하고 하나씩 꺼낸다.
        if j in clap: #3,6,9가 들어가 있으면
            cnt += 1 #카운트
    if cnt > 0: #만약 카운트가 1이상이면 즉, 3,6,9가 들어간 수이면
        i = '-' * cnt #카운트만큼 '-'에 곱하고 저장
    print(i, end=' ') #마지막으로 출력

👩‍💻 회고

쉽게 갈 수 있는 풀이도 있었는데 너무 어렵게 푼 것 같다. 처음엔 한 자리일 때와 두 자리 이상일 때를 분리해서 풀었지만 그렇게 풀다가 쓸데없이 코드 길이가 길어진다고 생각했다. 그래서 굳이 분리할 필요가 있나를 깨달아서 한 자리일 때도 다 분리하는 방향으로 갔더니 한결 간결해졌다.

그러나 369 개수만큼 '-'를 출력해야 하는 문제에서 고민을 많이 했는데, 다른 사람의 풀이만큼 간단한 결과는 나오지 않았다. 오늘도 하나 배워간다.