핵심 포인트 기초 구현력 제출코드 N = int(input()) arr = [3] for i in range(1, N): arr.append(arr[-1] + 2**i) print(arr[-1]**2) 해설 문제 설명이 복잡하기는 한데 단순히 N번째에서 점의 개수를 출력하는 문제 입니다. 패턴을 분석하면 다음과 같습니다. 1). N = 1 $\rightarrow$ 점의 개수 $3^{2}$ 2). N = 2 $\rightarrow$ 점의 개수 $5^{2}$ 3). N = 3 $\rightarrow$ 점의 개수 $9^{2}$ 4). N = 4 $\rightarrow$ 점의 개수 $17^{2}$ 따라서, 반복문을 N번 반복하면서 N번째에 해당하는 밑 숫자를 얻은 뒤 제곱하면 됩니다. 참고자료 및 그림출처 백준..
핵심 포인트 기초 구현력 제출코드 for _ in range(int(input())): cnt = {25:0, 10:0, 5:0, 1:0} N = int(input()) for key in cnt.keys(): cnt[key] = N // key N %= key print(' '.join(map(str, cnt.values()))) 해설 기초적인 구현력만 갖추셨다면 쉽게 풀 수 있는 문제입니다. 먼저, 테스트 케이스의 개수를 입력받습니다. 다음으로 cnt 변수를 초기화해줍니다. cnt 변수는 각 동전 (25, 10, 5, 1)의 개수를 의미합니다. 그러면 cnt의 각 key 값을 순회하면서 가장 큰 동전부터 시작해서 잔돈 N을 나눈 몫을 계산한 뒤 해당 동전 (key)에 해당하는 value를 채워줍니다...
핵심 포인트 진법 변환 제출코드 N, B = map(int, input().split()) num = [] while N !=0: if N % B >= 10: num.append(chr(N % B + 55)) else: num.append(N % B) N //= B print(''.join(map(str, reversed(num)))) 해설 BOJ 2745: 진법 변환과 유사한 문제로 10진법의 숫자를 주어진 진법으로 변환하여 숫자를 출력하는 문제입니다. 이를 위해서는 주어진 진법으로 십진법의 수를 나누었을 때 나머지값을 이용하면 됩니다. 이때, 10보다 크거나 같은 값이 나오면 A ~ Z로 변환해주기 위해서 아스키코드 표를 참조하였습니다. 추가적으로 진법 변환 시 자리수의 순서는 나눌 때의 반대가 되어..
핵심 포인트 진법 변환 제출코드 N, B = input().split() dec = 0 for digit, n in enumerate(N): if ord(n) >= 65: dec += (ord(n) - 55) * (int(B) ** (len(N) - digit - 1)) else: dec += int(n) * (int(B) ** (len(N) - digit - 1)) print(dec) 해설 이 문제를 풀기 위해서는 진법 변환의 개념을 알고 있어야합니다. 가장 간단한 이진법을 생각해보죠. 1001이라는 이진법 수가 들어왔을 때 이를 10진법으로 변환하는 방법은 다음과 같습니다. $$1 \times 2^{3} + 0 \times 2^{2} + 0 \times 2^{1} + 1 \times 2^{0} = 9..