한 걸음씩

[백준][python] 2577 숫자의 개수 본문

BOJ

[백준][python] 2577 숫자의 개수

winter17 2023. 1. 24. 17:01

https://www.acmicpc.net/problem/2577

 

2577번: 숫자의 개수

첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 크거나 같고, 1,000보다 작은 자연수이다.

www.acmicpc.net

풀이 과정 1

1. 세 가지의 수를 입력받아야 하므로 for loop에서 range(3)을 한다

2. 나오는 숫자 3개를 모두 곱해서 새로운 변수에 저장한다(변수 new)

3. 변수 new에 저장된 type은 integer이므로 string으로 변환해서 또 다른 새 리스트(str_new_list)에 저장한다

4. str_new_list를 for loop사용해서 초기에 설정해 둔 zero 변수 리스트 내에 위치에 알맞게 추가해 준다

5. 한 줄로 출력하기 위해서 for loop을 또 돌려준다

new = 1
zero = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
str_new_list = []
for i in range(3):
    N = int(input())
    new *= N
# new_list = 17037300
for i in str(new):
    str_new_list.append(i)
# str_new_list = '1', '7', '0', '3', '7', '3', '0', '0']
for i in str_new_list:
    zero[int(i)] += 1
# zero = [3, 1, 0, 2, 0, 0, 0, 2, 0, 0]
for i in zero:
    print(i)

풀이 과정 2

1. 주어진 세 개의 수를 입력받는 부분은 위의 풀이과정과 동일하고

2. 숫자를 string변환 후 list로 만들어주는 부분은 아래처럼 하는 게 더 간단

3. N_list for loop 돌려서 [방법 1]에서는 zero의 i위치 찾아서 인덱싱으로 접근해서 경우의 수에 따라 카운팅 해주는데

4. [방법 2]에서는 zero의 i위치를 바로 찾아서 +=1 해주면 더 간단하다! 

zero = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
N = 1
for _ in range(3):
    num = int(input())
    N *= num
# print(N) 17037300
N_list = list(str(N))  # ['1', '7', '0', '3', '7', '3', '0', '0']

# zero 리스트에 N_list의 각 요소의 개수를 카운팅하는 방법 1
for i in N_list:
    if zero[int(i)] == 0:
        if int(i) == 0:
            zero[int(i)] = 1
        zero[int(i)] = 1
    else:
        zero[int(i)] += 1
print(*zero, sep='\n')

# zero 리스트에 N_list의 각 요소의 개수를 카운팅하는 방법 2
for i in N_list:
    zero[int(i)] += 1
print(*zero, sep='\n')

리뷰

첫 번째 시도 ) str_new_list에 append 하는 것까지는 했는데 zero변수에 어떻게 위치에 맞춰서 넣어야 할지 알아내지 못했다

str_new_list내의 요소들은 전부 string이기 때문에 integer로 바꿔주면서 인덱싱을 통해 카운팅을 하면 되는 거였다

 

두 번째 시도 ) 처음에는 어떻게 요소를 카운팅 해야 할지도 몰랐는데 다시 풀어보기까지 지식이 좀 쌓여서 그런지

처음시도와는 코드가 다르지만 스스로 풀 수 있다는 것에 뿌듯함을 느꼈다!

그리고 첫 번째 시도 때 짠 코드와 두 번째 시도 때 짠 코드를 비교해 더 나은 방법을 찾은 게 [방법 2]