문제 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 문제 풀이 문제는 특정 수가 1이 되기 위해서 2, 3으로 나누거나 -1을 하였을 때 최소 횟수로 1을 만드는 방법을 찾는 것이다. 효율적으로 문제를 풀기 위해 메모이제이션(memoization)을 통해 문제를 접근하면 시간초과를 발생시키지 않고 문제를 풀 수 있다. 문제를 푸는 방법은 그림 1과 같다. 그림 1은 10인 경우에 메모이제이션을 통해 값을 찾는 과정이다. 다음과 같은 과정을 반복하여 카운트 값을 누적시켜가는 방식을 사용한다. 각 인덱스는 실제 값을 의미한다. (1 ~ N) 입력된 값과 인덱스를 일치시키기 위해 0번 인덱스를 사용하지 않는다. 입력 값이 1인..
문제 11576번: Base Conversion 타임머신을 개발하는 정이는 오랜 노력 끝에 타임머신을 개발하는데 성공하였다. 미래가 궁금한 정이는 자신이 개발한 타임머신을 이용하여 500년 후의 세계로 여행을 떠나게 되었다. 500년 후의 www.acmicpc.net 문제풀이 이 문제는 A진법을 B 진법으로 변환하는 문제이다. 앞서 다룬 2745 진법 변환, 11005 진법 변환 2 문제 처럼 A 진법을 10진법으로 변환 후에 다시 B 진법으로 변환하도록하여 문제를 풀었다. 앞의 문제들을 잘 풀었다면 이 문제는 더욱 쉽게 풀 수 있다. 코드 if __name__ == "__main__": a, b = map(int, input().split()) m = int(input()) nums = list(map..
문제 11005번: 진법 변환 2 10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 �� www.acmicpc.net 문제 풀이 진법 변환 문제에서 10진법의 수를 다시 해당 진법으로 변환하는 문제이다. 10진법의 수를 다른 진법으로 변환하기 위해서는 수가 0이 될 때 까지 나눈 후 각 나머지들을 기록해두면, 변환할 수 있다. 마찬가지로 10 보다 큰 수의 경우 A - Z 로 변환해 주어야 한다. 코드 if __name__ == "__main__": n, b = map(int, input().split()) answer = '' while n: r = n % b ..
문제 2745번: 진법 변환 B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 www.acmicpc.net 문제 풀이 진법 변환을 하기 위해선 각 자리에 해당 하는 위치에 따라 위치 값을 제곱해주면 된다. 예를 들어 예시와 같은 ZZZZZ인 경우는 (35 * 36 ^ 4) + (35 * 36 ^ 3) + (35 * 36 ^ 2) + (35 * 36 ^ 1) + (35 * 36 ^ 0)의 값이 10진법으로 변환된 값이다. 다른 문제와 달리 알파벳 A - Z도 같이 입력되므로 이를 구분하여 처리하여야 한다. isdigit()를 활용하여 문자, 숫자를 구분한다. 문자인..