본문 바로가기
코딩테스트

[백준] 2312 수 복원하기 - python

by CuckooBird 2023. 1. 31.

백준 실버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}