https://www.acmicpc.net/problem/5972 5972번: 택배 배송 농부 현서는 농부 찬홍이에게 택배를 배달해줘야 합니다. 그리고 지금, 갈 준비를 하고 있습니다. 평화롭게 가려면 가는 길에 만나는 모든 소들에게 맛있는 여물을 줘야 합니다. 물론 현서는 www.acmicpc.net [풀이] 다익스트라로 풀었다. [코드] import java.io.BufferedReader import java.io.BufferedWriter import java.io.InputStreamReader import java.io.OutputStreamWriter import java.util.PriorityQueue var N = 0 var M = 0 lateinit var map : ArrayList..
https://www.acmicpc.net/problem/2493 2493번: 탑 첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1 www.acmicpc.net [풀이] stack을 이용하여 풀면 편하다. 왼쪽 방향으로 이동하면서 인접한 탑끼리 비교를 한다. 2가지 경우로 나눌 수 있다. 1. i번째 탑이 i-1번째 탑의 높이보다 큰 경우 이러한 경우에는 i 번째에서 레이저 신호를 보내도 i-1에서 받을수가 없다. 따라서 Pair를 이용하여, i번째의 인덱스값과 높이를 stack에 저장을 한다. 2. i번째 탑이 i-1번째 탑의 높이보다 작거나 같은 경..
https://www.acmicpc.net/problem/16234 16234번: 인구 이동 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모 www.acmicpc.net [풀이] bfs를 통해 탐색을 하며, L 이상 R 이하인 인접한 땅을 찾아 배열에 저장을 하고, 탐색이 끝나면 저장한 배열을 이용하여 새롭게 인구수를 최신화를 해준다. 이러한 과정을 반복하면서 인구이동이 발생이 없을 때 까지 반복한다. 이를 최신화를 시키는 과정을 반복한다. [코드] import java.io.BufferedReader import java.io.BufferedWri..
https://www.acmicpc.net/problem/20437 20437번: 문자열 게임 2 첫 번째 문자열에서 3번에서 구한 문자열은 aqua, 4번에서 구한 문자열은 raquator이다. 두 번째 문자열에서는 어떤 문자가 5개 포함된 문자열을 찾을 수 없으므로 -1을 출력한다. www.acmicpc.net [풀이] 투 포인터로 풀었다. 풀이 과정은 다음과 같다. 입력 받은 문자열의 각 자리별 인덱스 위치를 저장해두는 배열을 만든다. 예를 들어 abbc라는 문자열을 받는다면, [[0],[1,2],[3]]과 같이 인덱스를 저장하는 배열을 만든다. 문자열을 W라고 표현하고 저장하는 배열을 abcIndex라고 한다면 아래와 같다. var W = br.readLine().toString() var abc..
https://www.acmicpc.net/problem/22233 22233번: 가희와 키워드 1번째 글을 쓰고 난 후에, 메모장에 있는 키워드는 set, floyd, os가 됩니다. 2번째 글을 쓰고 난 후에, 메모장에 있는 키워드는 set, os가 됩니다. map은 1번째 글과 2번째 글에 중복으로 등장하였음을 www.acmicpc.net [풀이] hashSet에 메모장에 적어놓은 키워드를 저장합니다. 이후에 각 작성 글을 (,) 를 기준으로 나누어 hashSet에서 remove를 해주면 되는 간단한 문제입니다. 하지만, 그냥 기본적인 입출력인 readLine()이나 println()를 사용하면 시간초과가 발생합니다. 이를 해결하기 위해서는, 빠른 입출력을 위해 BufferedReader와 Buff..
https://www.acmicpc.net/problem/2531 2531번: 회전 초밥 첫 번째 줄에는 회전 초밥 벨트에 놓인 접시의 수 N, 초밥의 가짓수 d, 연속해서 먹는 접시의 수 k, 쿠폰 번호 c가 각각 하나의 빈 칸을 사이에 두고 주어진다. 단, 2 ≤ N ≤ 30,000, 2 ≤ d ≤ 3,000, 2 ≤ www.acmicpc.net [풀이] 투 포인터를 통해 해결하였다. nList 라는 배열을 만들어, 연속 해서 먹는 접시 수 k 만큼 저장을 해둔다. 또한 hashSet을 이용하여, 초밥 가지 수를 구할 수 있다. 이렇게 구한 초밥 가지 수를 최대 값과 비교해 가며 갱신을 한다 이때 만약 고른 초밥에 쿠폰 초밥이 있으면, 길이를 그냥 비교를 하고 만약 쿠폰 초밥이 없다면 길이에 +1하여..