[백준] 2910번: 빈도 정렬 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 2910번: 빈도 정렬첫째 줄에 메시지의 길이 N과 C가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ C ≤ 1,000,000,000) 둘째 줄에 메시지 수열이 주어진다.www.acmicpc.net 풀이 LinkedHashMap 자료구조를 활용해 해결할 수 있다. LinkedHashMap은 일반 HashMap과 달리 입력된 순서를 그대로 기억하는 맵으로 정렬 시 등장 순서를 따로 비교할 필요가 없다. 입력받은 값을 빈도에 따라 정렬한 뒤, flatMap을 사용해 최종 출력 리스트를 만들어준다. flatMap은 리스트의 각 요소를 여러 개의 요소로 펼쳐서 새로운 리스트를 만들어 준다. 여기서는 빈도수만큼 반복해 하나의 리스트로 합친다. 코드 fun main() { val (n, c) = r..
[백준] 3184번: 양 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제  3184번: 양첫 줄에는 두 정수 R과 C가 주어지며(3 ≤ R, C ≤ 250), 각 수는 마당의 행과 열의 수를 의미한다. 다음 R개의 줄은 C개의 글자를 가진다. 이들은 마당의 구조(울타리, 양, 늑대의 위치)를 의미한다.www.acmicpc.net  풀이  큐를 이용한 너비 우선 탐색(BFS)으로 해결하였다. 반복문을 통해 울타리가 아닌 경우에 BFS 탐색을 수행하고 방문을 처리 해준다.  BFS 탐색에서는 큐의 현재 위치에서 네 방향으로 탐색을 수행한다. 만약 울타리가 아닌 경우에 큐에 해당 위치를 넣어준다. 탐색 범위 내에서 양과 늑대의 수를 세어준다. 탐색이 끝났을 때 양의 수가 늑대보다 많은 경우에는 살아 있는 양으로 판단하여 값을 더해주고, 아니 경우에는 늑대의 값을 더해준다. 코..
[백준] 10158번: 개미 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 10158번: 개미가로 길이가 w이고 세로 길이가 h인 2차원 격자 공간이 있다. 이 격자는 아래 그림처럼 왼쪽 아래가 (0,0)이고 오른쪽 위가 (w,h)이다. 이 공간 안의 좌표 (p,q)에 개미 한 마리가 놓여있다. 개미는 오www.acmicpc.net 풀이 개미는 매 시간마다 x축, y축 방향으로 각각 1씩 이동하며, 벽에 부딪히면 반사되어 방향을 바꾼다. 즉, 가로 방향으로는 2 × width, 세로 방향으로는 2 × height만큼 이동한 후 원래 위치로 돌아오는 주기를 갖는다. 따라서, 전체 시간 time을 2*width와 2*height로 나눈 나머지를 통해 현재 위치를 주기적으로 계산할 수 있다. 개미의 초기 좌표 (p, q)에서 이동한 거리를 단순히 더해주면 된다. 다만, 이..
[백준] 1063번: 킹 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 1063번: 킹8*8크기의 체스판에 왕이 하나 있다. 킹의 현재 위치가 주어진다. 체스판에서 말의 위치는 다음과 같이 주어진다. 알파벳 하나와 숫자 하나로 이루어져 있는데, 알파벳은 열을 상징하고, 숫자는www.acmicpc.net 풀이 체스판 위에서 왕과 돌을 주어진 명령에 따라 이동시키는 시뮬레이션 문제이다. 체스의 이동 방향(R, L, B, T, RT, LT, RB, LB)을 dx, dy 배열로 정의한다. 조건문으로 하나하나 비교할 필요 없이, 배열을 통해 간단하게 좌표 변화를 계산할 수 있다. 입력으로 들어온 명령을 하나씩 확인하면서 왕을 이동시킨다. 이동하려는 위치가 체스판 범위를 벗어나면 해당 명령은 무시한다. 만약 왕이 이동하려는 위치에 돌이 있다면, 돌도 같은 방향으로 함께 이동..
[백준] 2023번: 신기한 소수 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 2023번: 신기한 소수 수빈이가 세상에서 가장 좋아하는 것은 소수이고, 취미는 소수를 가지고 노는 것이다. 요즘 수빈이가 가장 관심있어 하는 소수는 7331이다. 7331은 소수인데, 신기하게도 733도 소수이고, 73도 소수 www.acmicpc.net 풀이 입력받은 자릿수의 모든 수를 차례대로 소수 판정하는 것은 시간이 오래걸린다. 대신, 신기한 소수는 왼쪽의 한 자리 수부터 소수여야 한다는 점을 이용하여 경우의 수를 줄일 수 있다. 백트래킹을 이용해 현재 소수인 수들만 다음 자리수를 더한 소수를 찾는 탐색을 진행하면된다. 먼저 신기한 소수가 되려면 첫째 자리 수가 소수인 2, 3, 5, 7 중 하나여야 한다. 그 외의 수로 시작하는 수는 다음 단계로 진행하지 않는다. 예를 들어 첫째 자리가 ..