알고리즘 43

[boj2531, 15961/Java] 회전 초밥

https://www.acmicpc.net/problem/2531 2531번: 회전 초밥 첫 번째 줄에는 회전 초밥 벨트에 놓인 접시의 수 N, 초밥의 가짓수 d, 연속해서 먹는 접시의 수 k, 쿠폰 번호 c가 각각 하나의 빈 칸을 사이에 두고 주어진다. 단, 2 ≤ N ≤ 30,000, 2 ≤ d ≤ 3,000, 2 ≤ www.acmicpc.net https://www.acmicpc.net/problem/15961 15961번: 회전 초밥 첫 번째 줄에는 회전 초밥 벨트에 놓인 접시의 수 N, 초밥의 가짓수 d, 연속해서 먹는 접시의 수 k, 쿠폰 번호 c가 각각 하나의 빈 칸을 사이에 두고 주어진다. 단, 2 ≤ N ≤ 3,000,000, 2 ≤ d ≤ 3,000, 2 www.acmicpc.net 초..

알고리즘 2023.07.31

[boj3649/Java]로봇 프로젝트

https://www.acmicpc.net/problem/3649 3649번: 로봇 프로젝트 각 테스트 케이스마다 한 줄에 하나씩, 구멍을 완벽하게 막을 수 있는 두 조각이 없다면 'danger'를 출력한다. 막을 수 있는 경우에는 'yes ℓ1 ℓ2'를 출력한다. (ℓ1 ≤ ℓ2) 정답이 여러 개인 경우에 www.acmicpc.net 해당 문제에서 제일 당황스러웠던건... 테스트 케이스 수가 주어지지 않았던거... 문제를 똑바로 안읽어서 여러번 틀렸는데 좀 당황스러웠음... 문제 자체는 간단했다! 투 포인터를 이용하는 문제인데 먼저 블록을 길이 순서대로 정렬하는 것이 필요했다. 일단 정렬해.. 그리고 정렬 후 최솟값을 left(l)로 최댓값을 right(r)로 설정하고 찾아야하는 길이가 l과 r의 길이..

알고리즘 2023.07.31

[boj17144/Java] 미세먼지 안녕!

https://www.acmicpc.net/problem/17144 17144번: 미세먼지 안녕! 미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사 www.acmicpc.net 해당 문제는 이차원 배열에서의 인덱스를 어떻게 효율적으로 접근하고, 그 값을 관리할 것인가에 대한 문제이다. 문제에서 구현해야하는 시뮬레이션은 1. 먼지의 확산 2. 공기청정기 동작 이렇게 둘로 나눌 수 있다. 여기서 모든 동작이 배열에서 인접한 칸에만 영향을 미치므로 이차원 배열을 활용해서 이를 구현하는 것으로 문제를 해결했다. 문제를 풀면서 파트를 총 4개(출력 제외하면 3개)로 나눠 생각해..

알고리즘 2023.07.26

[boj5397/Java] 키로거(Stack)

https://www.acmicpc.net/problem/5397 5397번: 키로거 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한줄로 이루어져 있고, 강산이가 입력한 순서대로 길이가 L인 문자열이 주어진다. (1 ≤ L ≤ 1,000,000) 강산이가 백스페이스를 입 www.acmicpc.net 해당 문제는 하노이의 탑과 비슷한 개념이라고 생각했다. 총 세개의 막대(입력 값, 정답, 잠깐 빼두는 곳)를 두고 입력 값에서 정답으로 블록을 옮긴다고 생각하면 stack을 이용해서 문제를 풀 수 있다. Java 에서 Stack을 이용하는 방법은 다음과 같다. 1. 선언 import java.util.Stack; Stack stack = new Stack(); 2. 함수 기능 함수 리턴 삽..

알고리즘 2023.07.24

[boj13335/Java] 트럭(Queue 사용법)

https://www.acmicpc.net/problem/13335 13335번: 트럭 입력 데이터는 표준입력을 사용한다. 입력은 두 줄로 이루어진다. 입력의 첫 번째 줄에는 세 개의 정수 n (1 ≤ n ≤ 1,000) , w (1 ≤ w ≤ 100) and L (10 ≤ L ≤ 1,000)이 주어지는데, n은 다리를 건너는 트 www.acmicpc.net 이 트럭 문제를 풀기 위해서 Java에서의 Queue 에 대한 사용법을 먼저 살펴봤다. Queue는 기본적으로 FIFO(선입선출)의 특징을 가지며 제일 먼저 삽입된 값이 제일 먼저 제거된다. java에서 Queue의 선언은 다음과 같다. import java.util.Queue; import java.util.LinkedList; Queue queu..

알고리즘 2023.07.24

[boj2477/Java] 참외밭

https://www.acmicpc.net/problem/2477 2477번: 참외밭 첫 번째 줄에 1m2의 넓이에 자라는 참외의 개수를 나타내는 양의 정수 K (1 ≤ K ≤ 20)가 주어진다. 참외밭을 나타내는 육각형의 임의의 한 꼭짓점에서 출발하여 반시계방향으로 둘레를 돌면서 지 www.acmicpc.net 문제를 푸는데 있어서 필요한 것은 사각형의 넓이를 구하기 위해서 도대체 어디가 안으로 들어가 있는 부분의 길이인가를 구하는 것이라고 생각했다. 한시간 이상 고민하다가 안되서 다른 풀이를 읽어보고 다시한번 최적화해봤다. 문제를 읽어봤을 때 방향과 길이를 줄 때 출발지는 랜덤이긴 하지만 연속된 모서리를 돌기 때문에 index 상에서 동서 방향 옆에는 항상 남북 방향이 온다. 그리고 가로 방향 중 가..

알고리즘 2023.07.20

[boj2607/Java] 비슷한 단어

https://www.acmicpc.net/problem/2607 2607번: 비슷한 단어 첫째 줄에는 단어의 개수가 주어지고 둘째 줄부터는 한 줄에 하나씩 단어가 주어진다. 모든 단어는 영문 알파벳 대문자로 이루어져 있다. 단어의 개수는 100개 이하이며, 각 단어의 길이는 10 이 www.acmicpc.net 위의 문제에서 비슷한 단어를 판단하는 가장 중요한 요소는 포함하고 있는 알파벳의 종류와 개수에 있다고 생각했다. 그래서 기준 단어에 대한 A~Z까지 알파벳의 개수를 관리하기 위한 배열을 선언하고 각각의 단어도 확인을 위한 배열을 선언한다. 그리고 String 클래스의 toCharArray 함수를 이용해서 char 배열로 String을 바꾼 뒤, 알파벳 개수를 확인. 처리 과정에서 차이를 계산하고..

알고리즘 2023.07.17

[boj6884/Java] 소수 부분 수열

https://www.acmicpc.net/problem/6884 6884번: 소수 부분 수열 각 테스트 케이스마다 가장 짧은 소수 부분 수열의 길이가 x라면 "Shortest primed subsequence is length x:"를 출력하고, 그 수열 공백으로 구분해 출력한다. 가장 짧은 소수 부분 수열이 여러 가지면, 먼저 www.acmicpc.net 문제 풀면서 연속 부분 수열이라는걸 놓치고 있어서 조합으로 풀어야하는건가 하고 계속 고민했는데, 연속 부분 수열이여서 삽질을.. 문제를 풀면서 수를 계속 소수인지 아닌지 확인해봐야할 것 같아서 모든 원소를 다 더한 값까지 에라토스테네스의 체를 미리 만들고 부분합을 길이를 기준으로 탐색을 하려고 했다. (지금 생각해보니 범위가 그렇게 넓지 않고, 소수..

알고리즘 2023.07.17

[boj11140/Java] LOL

https://www.acmicpc.net/problem/11140 11140번: LOL 당신 친구 지민이는 지금 할 일이 없다. 그리고 매우 심심하다. 그래서 쓸데없는 짓으로 시간을 때우려고 한다. 그래서 단어 하나가 주어질 때 단어에 'lol'이 들어가도록 글자를 추가하거나 변경 www.acmicpc.net 위의 문제를 풀기 위해서 일정 패턴을 인식하고 그에 따른 처리 횟수를 출력하는 방법을 생각했다. 여기서 케이스는 문자열에 1) "lol" 자체가 포함되어 있는 경우 -> 추가적으로 처리할 필요 없음(0) 2) "lo", "ol", "ll", "l_l"과 같이 하나만 추가해서 "lol"을 만들 수 있는 경우 -> 추가 또는 수정만 진행(1) 3) "l"또는 "o"가 포함되어 있는 경우 -> 2개 추..

알고리즘 2023.07.17