백준 실버3 2312 수 복원하기 python
https://www.acmicpc.net/problem/2312
2312번: 수 복원하기
첫째 줄에 테스트 케이스의 수가 주어진다. 각 테스트 케이스마다 양의 정수 N (2 ≤ N ≤ 100,000)이 주어진다.
www.acmicpc.net
코드
맞았습니다가 뜬 코드입니다. - 메모리 31256KB | 시간 148ms | 코드 길이 465B
import sys
def primeFactorization(n):
for i in range(2, n+1):
if n % i == 0:
if i not in prime.keys():
prime.setdefault(i, 1)
else:
prime[i] += 1
primeFactorization(n//i)
break
N = int(sys.stdin.readline().rstrip())
for _ in range(N):
n = int(sys.stdin.readline().rstrip())
prime = dict()
primeFactorization(n)
for k, v in prime.items():
print(k, v)
재귀함수를 이용하여 소인수를 구하고, 나눈 수를 다시 함수에 집어넣었습니다.
딕셔너리에 소인수가 몇번 나왔는지 밸류에 더해줬습니다.
Search 🔍
- 딕셔너리에 키값 , 밸류값 저장하는 방법 - setdefault( key (, value ) ) 함수
dic = dict()
dic.setdefault('사과', 1) # 첫번째 파라미터 : key값, 두번째 파라미터 : value값
print(dic) # {'사과': 1}
dic.setdefault('포도') # 두번째 파라미터를 주지 않으면 None으로 들어값니다.
print(dic) # {'사과': 1, '포도': None}
+ update( key = value , ... ) 함수 : 딕셔너리의 해당 키값을 이용하여 수정할 수 있습니다.
dic = dict()
dic.setdefault('사과', 1)
dic.setdefault('포도')
dic.update(포도 = 1)
print(dic)
# {'사과': 1, '포도': 1}
,(콤마) 를 이용하여 여러개를 수정할 수도 있습니다.
dic = dict()
dic.setdefault('사과', 1)
dic.setdefault('포도')
dic.setdefault('오렌지')
dic.update(포도 = 1, 오렌지 = 2)
print(dic)
# {'사과': 1, '포도': 1, '오렌지': 2}
key값이 문자열이 아닌 경우에는 update함수를 쓸 수 없습니다. 대신 딕셔너리 초기화하듯 넣으시면 됩니다.
dic = dict()
dic.setdefault(1)
# dic.update(1, 2) -> 'update expected at most 1 argument, got 2' 오류문
dic.update({1 : 2})
print(dic)
# {1: 2}
++ setdefault() vs update() 차이점
setdeafault() 함수로는 이미 들어간 밸류 값을 수정할 수 없습니다.
dic = dict()
dic.setdefault('사과', 1)
# setdefault사용 후 update 사용 시
dic.setdefault('포도', 2) # 포도 : 2 에서
dic.update(포도 = 1) # 포도 : 1 로 수정
print(dic)
# {'사과': 1, '포도': 1}
# 이미 있는 밸류 값에 setdefault를 할 경우
dic.setdefault('포도', 2) # 포도 : 1 로 나옴 -> 수정 안 됨
print(dic)
# {'사과': 1, '포도': 1}
'코딩테스트' 카테고리의 다른 글
[백준] 1449 수리공 항승 - python (1) | 2023.02.01 |
---|---|
[백준] 1431 시리얼 번호 - python (2) | 2023.01.31 |
[백준] 20309 트리플 소트 - python (0) | 2023.01.30 |
[백준] 3182 한동이는 공부가 하기 싫어! - python (0) | 2023.01.30 |
[백준] 8911 거북이 - python (2) | 2023.01.29 |