count( )
: 문자열에서 쓰이는 메서드(클래스 안에 있는 함수)입니다.
내부에 찾을 문자를 넣고, 추가적으로 찾을 곳의 시작과 끝을 넣어주기도 한다.(넣지 않는 경우, 전체 탐색)
set( )
: 집합 함수, 교집합, 차집합, 합집합으로 쉽게 구할 수 있다.
- 중복을 허용하지 않는다.
- 순서가 없다.
- 교집합 : & 또는 intersection함수 이용
- 합집합 : | 또는 union함수 이용
- 차집합 : - 또는 difference함수 이용
dictionary
{Key1:Value1, Key2:Value2, Key3:Value3, ...} 이런 식으로 한 쌍으로 대응되는 자료형이다.
key에는 변하지 않는 값, value에는 상관 없이 사용한다.지금은 간단하게만 사용하고 후에 더 응용되는 문제를 풀게 될 것이다.!
1. 숫자의 개수
#숫자의 개수
a = int(input())
b = int(input())
c = int(input())
mul = str(a * b * c)
num = [i*0 for i in range(10)]
for i in mul:
num[int(i)] += 1
for i in num:
print(i)
런타임 에러(ValueError)
: 이유는 a, b, c = map(int, input())이 원인이였다. (멍청...ㅎ)
입력을 한 줄에 하나씩 받아주기 때문에 위처럼 해주면 된다.
또 추가적으로, 다른 분들의 코드를 살펴보니 나보다 더 간단하게 되어있음을 확인하였다.
#숫자의 개수
a = int(input())
b = int(input())
c = int(input())
mul = str(a*b*c)
for i in range(10):
print(mul.count(str(i)))
count라는 함수를 이용하여서 문자열이 해당 영역에 몇 개가 존재하는 지 한 번에 확인할 수 있었다.
2. 나머지
#나머지
num = []
for i in range(10):
num.append(int(input()))
num[i] = num[i]%42
num = set(num) #set() : 집합 함수 , 중복을 허용하지 않는다, 순서가 없다.(기억해....)
print(len(num))
하.. 이 문제 같은 경우는 일단 나머지로 리스트를 구현해주고, count함수를 이용해서 해당 나머지가 이 리스트 안에 1개 이상 존재하면 result += 1로 해서 서로 다른 나머지 개수를 구해주려 했으나,, 이미 세어준 나머지가 다시 세어지는 오류가 발생하였다.
set( )을 쓸 생각은 했는데,,, 바로 생각을 접었었다.ㅠ
set()이라는 집합 함수는 "중복을 허용하지 않는다. 순서가 없다." 라는 특징을 좀 더 기억하고 있어야겠다.
추가로, dictionary라는 자료형을 사용하는 코드를 보게 되었다.
#나머지
a = {} #dictionary 자료형 : key는 변할 수 없다. value는 상관없
for i in range(10):
b = int(input())
a[b%42] = i
print(len(a))
이런 식으로, dictionary 자료형을 사용해, 나머지 값은 변하지 않는 key에 넣고 value에 수를 넣어주고 len함수를 이용해 총 길이를 구해주면 총 서로 다른 나머지의 개수를 구할 수 있다.
참조)
[파이썬] 백준 ) 3052번 문제 풀이 - 공부하는 도비 (tistory.com)