마음만은 새내기

항상 초심을 잃지 않고 생활하겠습니다~!

BOJ 문제 풀이 42

BOJ 1463번(1로 만들기) 문제 풀이

★ solved.ac 난이도 : S3 (작성 시점 기준) [문제 본문 링크] 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 이 문제는 일반적인 동적 계획법(DP) 문제입니다. 먼저 크기가 100만 이상인 충분한 정수 배열을 만듭니다. (배열의 이름은 dp로 설정하며, 이 배열에 정답을 계산해 저장합니다.) 입력이 1이면 연산이 필요하지 않으므로 정답은 0입니다. (dp[1] = 0) 2 이상의 입력에 대해서는 문제의 조건에 따라 3가지로 생각할 수 있습니다. 경우 1. x가 3으로 나누어 떨어지는 경우 3으로 나누기 : min(dp[x], dp[x/3]+1)을 계산합니다. (여기에서 +1은 1번의 추가 연산을 의미합니다...

BOJ 2941번(크로아티아 알파벳) 문제 풀이 (Python 3)

★ solved.ac 난이도 : S5 (2021년 12월 29일 기준) 오랜만에 Python으로 BOJ 문제를 풀어보았어요~! (요즘 들어 Python 언어의 인기가 높아지고 있다는 소리도 들었죠...) 오늘은 BOJ 2941번 문제를 Python으로 간단하게 푸는 법을 알려드릴게요~! https://www.acmicpc.net/problem/2941 2941번: 크로아티아 알파벳 문제 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= 예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루..

BOJ 15792번(A/B - 2) 문제 풀이

★ solved.ac 난이도 : B2 (2022년 03월 29일 기준) [문제 바로가기] 15792번: A/B - 2 첫째 줄에 A와 B가 주어진다. (0 < A, B ≤ 10,000) www.acmicpc.net [풀이] 이 문제의 경우, 만점을 받기 위해서 약간의(?) 생각이 필요한 문제입니다. 단순하게 나눗셈 연산자를 사용할 경우, 2000점 만점에 18점(!)으로 예상하는데요, 여기에서 생각을 하셔야 합니다. 초등학교 때 배웠던 (손으로 계산하는) 나눗셈을 C언어로 옮기면 가능합니다. (여기에서는 A/B를 계산합니다.) 먼저, 나눗셈의 몫을 계산하고 출력합니다. 그리고, 계산된 몫에 B를 곱해서 A에서 빼줍니다. 여기에서 A의 값이 0이면 즉, 나누어 떨어지면, 반복문을 종료합니다. 그렇지 않으면..

BOJ 7785번(회사에 있는 사람) 문제 풀이

★ solved.ac 난이도 : S5 (2021년 12월 29일 기준) [문제 바로가기] 7785번: 회사에 있는 사람 첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는 www.acmicpc.net [풀이] 알파벳 대소문자로 이루어진 이름과 출입 기록(enter 또는 leave)이 주어질 때, 최종적으로 남아있는 사람들의 목록을 사전 역순으로 출력하는 문제입니다. 여기에서 출입 기록의 수 N의 값이 최대 100만개(!!)라는 점과 이름의 최대 길이는 5자라는 점이 있었습니다. 처음에는 C++ STL의 map을 사용해서 문제를 해결..