본문 바로가기
  • 개발하는 곰돌이

Algorithm107

[Kotlin] 백준 13199 : 치킨 먹고 싶다 문제 링크 13199번: 치킨 먹고 싶다 서울대학교 301동에는 아는 사람만 아는 “눕치킨”이란 치킨집이 있다. 이 치킨집은 여느 치킨집처럼 치킨을 시킬 때 마다 쿠폰을 C 장 주고, 쿠폰을 F 장 모으면 치킨을 공짜로 시킬 수 있다. 눕 www.acmicpc.net 문제 해설 기본적으로 시킬 수 있는 치킨의 마리수와 치킨을 시키면서 받을 수 있는 쿠폰의 개수는 간단하게 구할 수 있다. val chicken = money / price val coupon = chicken * c 이제 두영이의 경우와 상언이의 경우를 나눠서 생각해보자. 두영이의 경우는 쿠폰으로 시키는 치킨에 쿠폰이 나오지 않는다. 따라서 기본 치킨 마리수에 쿠폰의 개수를 \(f\)로 나눈 값을 그냥 더해주기만 하면 된다. val dooy.. 2024. 3. 25.
[Kotlin] 백준 3107 : IPv6 문제 링크 3107번: IPv6 첫째 줄에 올바른 IPv6 주소가 주어진다. 이 주소는 최대 39글자이다. 또한, 주소는 숫자 0-9, 알파벳 소문자 a-f, 콜론 :으로만 이루어져 있다. www.acmicpc.net 문제 해설 문자열 파싱 문제. 조건에 맞게 축약된 IPv6를 원래 IPv6로 복원해야 한다. 문제에서 주어진 두가지 조건을 역순으로 생각해보자. 0으로만 이루어져 있는 하나 이상의 연속된 그룹을 하나 골라서 콜론 2개(::)로 바꿀 수 있다. IPv6는 8 그룹의 16진수로 구성되어 있다. 즉, 축약되지 않은 원래 형태는 7개의 콜론으로 16진수 그룹을 나누게 된다. 즉, 축약된 IP 주소에서 콜론의 개수가 7개가 되도록 보충을 해주면 된다. split()으로 문자열을 분리하면 빈 문자열이.. 2024. 2. 20.
[Kotlin] 백준 25240 : 가희와 파일 탐색기 2 문제 링크 25240번: 가희와 파일 탐색기 2 Q개의 질문에 대해, 연산이 성공하면 1을 실패하면 0을 출력해 주세요. 각 질문에 대한 답은 한 줄에 하나씩 출력해 주세요. www.acmicpc.net 문제 해설 리눅스의 파일 권한과 관련된 문제. 관련 지식이 있다면 어렵지 않게 풀 수 있다. 우선 각 권한을 2진수로 바꿔보자. \begin{align*} 000 &\to 권한 없음\\ 001 &\to 실행 가능\\ 010 &\to 수정 가능\\ 011 &\to 실행 및 수정 가능\\ 100 &\to 읽기 가능\\ 101 &\to 읽기 및 실행 가능\\ 110 &\to 읽기 및 수정 가능\\ 111 &\to 읽기, 수정, 실행 모두 가능 \end{align*} 여기서 \(2^2\)에 해당하는 비트는 읽기.. 2023. 12. 30.
[Kotlin] 백준 11082 : 소수를 분수로 문제 링크 11082번: 소수를 분수로 Cube World에서는 모든 유리수를 소수로 표시하고, Baekjoon World에서는 모든 유리수를 분수로 표시합니다. 이때문에 두 나라 간에 오랜 기간 동안 전쟁을 치뤘고, 마침내 서로의 생각을 존중하기로 www.acmicpc.net 문제 해설 소수의 형태로 주어지는 유리수를 기약분수로 치환해야 한다. 우선 입력으로 주어지는 수는 정수, 유한소수, 순환소수 3가지의 경우로 구분할 수 있다. 각 경우에 대해서 생각해보자. 정수인 경우 예제 1과 같이 단순히 분자가 입력으로 주어진 수이고 분모가 1인 형태로 나타내면 된다. println("$decimal/1") 유한소수인 경우 소수부의 길이가 \(n\)이라고 할 때, 유한소수를 분수로 나타내는 가장 쉬운 방법은 .. 2023. 12. 11.
[Kotlin] 백준 1850 : 최대공약수 문제 링크 1850번: 최대공약수 모든 자리가 1로만 이루어져있는 두 자연수 A와 B가 주어진다. 이때, A와 B의 최대 공약수를 구하는 프로그램을 작성하시오. 예를 들어, A가 111이고, B가 1111인 경우에 A와 B의 최대공약수는 1이고, A www.acmicpc.net 문제 해설 모든 자리가 1로 이루어진 두 수의 최대 공약수를 구해야 한다. 우선 모든 자리가 1로 이루어진 수가 어떻게 구성되는지 보자. \(1111\)의 경우에는 다음과 같이 나눌 수 있다. $$1111=11\times 101$$ 또 다른 수인 \(111111\)은 다음과 같이 나눌 수 있다. $$\begin{align*}111111&=11\times 10101\\&=111\times 1001\end{align*}$$ 자세히 보.. 2023. 11. 11.
[Kotlin] 백준 3447 : 버그왕 문제 링크 3447번: 버그왕 입력은 여러 줄의 소스 코드로 이루어져 있다. 이 소스 코드는 백준이가 작성한 버그를 찾는 프로그램으로 이미 처리가 되어있다. 각 줄은 100글자 이내이고, 입력은 파일이 끝날 때 끝난다. 줄의 www.acmicpc.net 문제 해설 주어진 입력에서 BUG라는 문자열을 모두 제거하면 된다. 우선 입력을 EOF까지 받기 때문에 아래와 같은 형태처럼 입력이 null이 아닐 때까지 입력받는 반복문으로 처리해야 한다. var s: String? while (readLine().also { s = it } != null) { ... } BUG라는 문자열을 모두 제거하기 위해 단순히 replace()로 처리하면 되긴 하지만 출력 설명의 예시를 잘 주목해야 한다. 즉, 입력으로 주어진 .. 2023. 10. 14.
[Kotlin] 백준 21944 : 문제 추천 시스템 Version 2 문제 링크 21944번: 문제 추천 시스템 Version 2 recommend, recommend2, recommend3 명령이 주어질 때마다 문제 번호를 한 줄씩 출력한다. 주어지는 recommend, recommend2, recommend3 명령어의 총 개수는 최소 1개 이상이다. www.acmicpc.net 문제 해설 [Kotlin] 백준 21939 : 문제 추천 시스템 Version 1의 확장 문제. Version 1에서 알고리즘 분류를 비롯하여 추천 명령어 2종류가 추가되었다. 이전 문제와 달리 문제를 객체로 구현하였다. 이 때 문제 클래스는 난이도가 높은 순으로, 난이도가 같다면 문제 번호가 큰 순으로 정렬되도록 Comparable을 구현하여 작성한다. private class Problem(.. 2023. 9. 13.
[Kotlin] 백준 27162 : Yacht Dice 문제 링크 27162번: Yacht Dice 《Yacht Dice》는 여러 명이 플레이하는 주사위 게임입니다. 플레이어는 우선 주사위를 $5$개 굴립니다. 이후 원하는 주사위를 고정시킨 뒤, 남은 주사위를 다시 굴리는 일을 두 번 이하로 할 수 있 www.acmicpc.net 문제 해설 다양한 조건 분기에 따라 조건에 맞는 계산을 수행하는 문제. Y에 해당하는 족보의 점수를 모두 계산한 후 가장 높은 값을 출력하면 된다. 이미 3개의 주사위가 고정되어 있기 때문에 나머지 2개의 주사위가 최적인 경우를 생각해볼 수 있다. Ones부터 Sixes까지는 나머지 2개의 주사위가 족보에서 요구하는 주사위의 눈이 나왔을 때 최대가 된다. 즉, 입력으로 주어진 고정된 주사위 중에서 (족보에 따라 1~6의 개수 + 2.. 2023. 9. 5.