6679번: 싱기한 네자리 숫자
싱기한 네자리 숫자란, [1000,9999]인 10진수 숫자중에서, 다음의 조건을 만족하는 숫자를 말한다. 숫자를 10진수, 12진수, 16진수로 나타낸 다음, 각각의 숫자에 대해, 각 숫자의 자리수를 더했을 �
www.acmicpc.net
소스 코드는 다음과 같다.
digit = ['0','1','2','3','4','5','6','7','8','9']
def convert(n, base):
T = "0123456789ABCDEF"
q, r = divmod(n, base) #divmod 몫과 나머지를 반환하는 함수
if q == 0:
return T[r]
else:
return convert(q, base) + T[r]
for i in range(1000,10000):
c_10 = sum(list(map(int, str(i))))
c_12_temp = convert(i, 12)
c_16_temp = convert(i, 16)
c_12 = 0; c_16 = 0
for j in c_12_temp:
if j in digit:
c_12 += int(j)
else:
c_12 += ord(j) - 55
for k in c_16_temp:
if k in digit:
c_16 += int(k)
else:
c_16 += ord(k) - 55
if c_10 == c_12 == c_16:
print(i)
i를 받았을 때, 이를 각각 10진법 12진법, 16진법으로 변환하고,
각 진법에서 자리수의 합을 비교하여 서로 같다면 i를 출력하도록 했다.
n진법을 변환하는 방법으로 두고두고 사용하자!
출처: codingdojang.com/scode/458
코딩도장
프로그래밍 문제풀이를 통해서 코딩 실력을 수련
codingdojang.com
원리 설명:
[BOJ](Python) 1975번 : Number Game
https://www.acmicpc.net/problem/1975 1975번: Number Game 창영이는 심심해서 혼자 재미 없는 게임을 하나 생각해냈다. 숫자 N을 먼저 정하고, 이 숫자를 2진법, 3진법, 4진법, ..., 100만진법, 100만 1진법 등..
skeo131.tistory.com
이 문제와 푸는 방법이 매우 유사한데,
n을 k진법으로 변환하고자 할 때, n을 k로 나눴을 때 나머지는 n을 k진법으로 변환하였을 때 그 끝자리와 같고, 그 앞의 자리는 n//k를 k진법으로 변환하였을 때 그 나머지이다.
예를 들어, 13을 3진법으로 변환한다면 다음과 같다.
13은 3으로 나누었을 때 몫이 4이고, 나머지가 1이다. 따라서 13을 3진법으로 바꾸었을 때 맨 끝자리는 1이다.
그 다음, 4를 3진법으로 나누었을 때 몫이 1이고 나머지가 1이다. 따라서 4를 3진법으로 나누었을 때 맨 끝자리는 1이다.
그 다음, 1을 3진법으로 나누었을 때 몫이 0이고 나머지가 1이다. 몫이 0이므로 백트래킹을 종료하고 나머지를 반환한다.
'컴퓨터 > BOJ' 카테고리의 다른 글
[BOJ](Python) 8320번 : 직사각형을 만드는 방법 (0) | 2020.08.30 |
---|---|
[BOJ](Python) 1010번 : 다리 놓기 (0) | 2020.08.30 |
[BOJ](Python) 4690번 : 완전 세제곱 (0) | 2020.08.29 |
[BOJ](Python) 3049번 : 다각형의 대각선 (0) | 2020.08.29 |
[BOJ](Python) 2998번 : 8진수 / deque 주의할 점 (0) | 2020.08.29 |