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

Algorithm109

[Kotlin] 백준 23031 : 으어어… 에이쁠 주세요.. 문제 링크 : https://www.acmicpc.net/problem/23031문제 해설특별한 알고리즘이 필요하진 않은 단순 구현 문제. 한 번의 이동이 발생했을 때 아리와 좀비가 마주치더라도 해당 칸에 스위치가 있거나 불이 켜져있기만 하면 아리는 기절하지 않는다. 이로 인해 아리의 행동할 때 마다 진행되는 내용을 과정을 3가지 단계로 나누어 생각해볼 수 있다.아리가 현재 순서에 맞는 행동을 수행한다.아리의 현재 위치에 스위치가 있다면 스위치를 킨다.모든 좀비들이 바라보는 방향으로 1칸 이동한다.이제 각 순서에 맞게 구현을 해보자.1. 아리가 현재 순서에 맞는 행동을 수행한다. 아리의 행동 중 방향을 바꾸는 L과 R을 생각해보자. 방향은 한 번 전환할 때 90도씩 전환하고 4번 전환하면 원래 방향을 보.. 2024. 5. 2.
[Kotlin] 백준 25418 : 정수 a를 k로 만들기 문제 링크 : https://www.acmicpc.net/problem/25418문제 해설정수 \(A\)에 1을 더하거나 2를 곱하는 연산을 반복하여 정수 \(K\)를 만들 때 필요한 가장 적은 연산 횟수를 구해야 한다. 역으로 생각해보면 이 횟수는 \(K\)를 2로 나누거나 1을 빼는 연산을 반복하여 \(A\)를 만드는 횟수와 동일하다. 2로 나누는 연산이 1을 빼는 연산보다 훨씬 효율적이기 때문에 \(K\)를 \(A\)로 만들 때 까지 현재 수가 짝수라면 2로 나누고, 홀수라면 1을 빼주면 된다.while (current != a) { if (current and 1 == 0) { current /= 2 } else { current-- } count++.. 2024. 4. 29.
[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.