전체 글 63

[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

[boj14400/Java]편의점 2

https://www.acmicpc.net/problem/14400 14400번: 편의점 2 영선이는 이번에 편의점으로 창업을 하려고 계획 중이다. 이번 창업을 위해 많은 준비를 하고 있는데, 아직 편의점을 세울 위치를 결정을 하지 못했다. 영선이는 미리 시장조사를 하여, 주요 고 www.acmicpc.net 이 문제에서 고려해야하는 것은 거리의 계산을 유클리드 거리(대각선 길이 = 제곱을 이용)를 이용하는 것이 아니라 멘하튼 거리(좌표 차의 합)을 이용하고 있다는 점이다. 문제를 해결함에 있어 처음에는 평균을 이용해야하는건지 고민이 있었는데, 일단 거리 최솟값을 구할 때 x좌표랑 y좌표를 따로 생각해서 x좌표끼리, y좌표끼리 최소가 되는 점을 정하면 될 것이라고 생각했다. 그렇다면 x좌표들 중에서 거리..

Java 2023.07.27

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

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

알고리즘 2023.07.26

[boj18870/Java]좌표 압축(HashMap)

https://www.acmicpc.net/problem/18870 18870번: 좌표 압축 수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표 Xj의 개수와 같아야 한다. X1, X2, ..., XN에 www.acmicpc.net 정렬..? 자료구조..? Set..? HashMap..? 뭘 써야할지 많은 고민을 했던 문제였다. 그래서 일단 해야할 일을 정리해봤을 때 다음과 같이 생각할 수 있었다. 1. 원래 배열을 정렬한다. 2. 순서에 맞춰서 중복되지 않도록 값을 매칭해준다. 여기서 중복되지 않도록 값을 매칭한다는 부분에서 hashMap을 이용해서 문제를 해결해야겠다고 ..

Java 2023.07.24

[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