python/알고리즘 문제풀이

[백준2577] 숫자의개수/ 문자열 하나하나 받아오기/ python

빛날희- 2021. 2. 24. 00:19

www.acmicpc.net/problem/2577

 

2577번: 숫자의 개수

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

www.acmicpc.net

1차원 배열을 이용한 문제다. 

 

 

▶입력값을 stdin으로 받아올까했으나, 반복문을 3번 돌리며 바로바로 곱셈연산을 수행하는 것이 연산량을 줄일 수 있지 않을까 하여 반복문 for와 input을 사용했다. 

 

우선 코드와 결과는 다음과 같다. 

## 2577
import sys
a=1
for i in range(0,3):
    a*=int(input())
lst= list(str(a))
for i in range(0,10):
    print(lst.count(str(i)))

곱셈 결과인 a의 숫자요소들에 대한 빈도수 계산이 필요했기 때문에 string으로의 변환이 필요했다.

변환 후 각 숫자요소들을 분리시켜 하나의 배열요소로 넣어주기 위해, 처음엔 split함수를 사용했다.

 

lst= str(a).split()

 

그런데 다음과 같이 문자열 전체가 lst변수에 들어가 출력되었다.

split의 파라미터로 아무것도 넣지 않으면 요소 별로 분리되어 나온다고 착각한 것이다. 다음 웹사이트를 참조해보면, split의 파라미터인 seperator는 optional param인데 여기서 default값이 whitespace이기 때문에 1000이 통째로 출력되어 나온 것이었다. 

split() parameter

 

 

 

▶문자열을 하나하나 분리해주기 위해선 문자열 a에 list함수를 사용해주면, 문자열의 문자들을 하나하나의 요소로 인식하여 리스트로 추가해준다. 

 

 

이후 해당 배열에서 0-9까지의 요소 빈도를 세주는 count함수를 사용하여 문제를 풀 수 있다.