본문 바로가기

알고리즘/백준33

[백준 1388 / 바닥 장식 / JAVA] https://www.acmicpc.net/problem/1388 1388번: 바닥 장식 형택이는 건축가이다. 지금 막 형택이는 형택이의 남자 친구 기훈이의 집을 막 완성시켰다. 형택이는 기훈이 방의 바닥 장식을 디자인했고, 이제 몇 개의 나무 판자가 필요한지 궁금해졌다. 나 www.acmicpc.net 문제 접근 문자 배열을 만들고 - 문자 체크를 위해 행으로만 쭉 검사 → - 문자일 경우 count + 1로 연속되는 판자 판단, 아니면 count = 0; count가 1일 때만 필요 판자 갯수 + 1, count가 2든 100이든 필요 판자는 1개니까 이후 |문자는 열만 쭉 읽으면서 검사 후 총 판자 갯수 출력 import java.util.*; import java.io.*; public class.. 2023. 6. 23.
[백준 18870 / 좌표 압축 / JAVA] https://www.acmicpc.net/problem/18870 18870번: 좌표 압축 수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌 www.acmicpc.net 문제 접근 각 인덱스가 자기 보다 작은 값들의 수를 값으로 갖고 있어야한다. 그래서 배열을 정렬시키면 0번 인덱스는 자신이 제일 작기 때문에 0을 가지고, 1번 인덱스는 0번 인덱스보다 크기에 1을 가진다. 이렇게 쭉 진행하면 인덱스 순서가 값이 되는데 중복인 수를 갖고 있으면 중복인 수들이 갖는 값도 같아야 한다. 이 때 정렬된 배열을 HashM.. 2023. 5. 19.
[백준 11048 / 이동하기 / JAVA] https://www.acmicpc.net/problem/11048 11048번: 이동하기 준규는 N×M 크기의 미로에 갇혀있다. 미로는 1×1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다. 미로의 가장 왼쪽 윗 방은 (1, 1)이고, 가장 오른쪽 아랫 방은 (N, M)이다. 준규는 www.acmicpc.net 문제 접근 N, M 좌표까지 가는 모든 경우의 수를 다 탐색해서 최대값을 구하였는데 시간초과가 뜨더라 시간을 단축시키기 위해선 각 좌표마다 그 좌표가 가질 수 있는 최대값을 저장해놓은 것이라고 한다. 사람이 움직일 수 있는 방향은 오른쪽, 아래, 오른쪽 아래 대각이니까 현재 서 있는 좌표가 최대값을 가지려면 현재 서 있는 좌표의 사탕 갯수 + 위, 왼쪽, 왼쪽 위 대각 (현재 서 있.. 2023. 5. 18.
[백준 16953 / A → B / JAVA / BFS, DFS] https://www.acmicpc.net/problem/16953 16953번: A → B 첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다. www.acmicpc.net 문제 접근 답을 보면 쉬우나 매번 떠올리는 게 쉽지 않다. DFS 재귀로 계속 돌면서 A, B가 같아지는 순간 최소 횟수를 저장하고 모든 재귀를 다 돌고 main 메서드로 돌아갔을 때, 최소 횟수에 변경이 있었으면 count를 출력하고 변경이 없었다면 A, B가 같아지는 순간이 없었기에 -1출력 import java.util.*; import java.io.*; public class Main { static long A; static long B; static int count = Integer.MAX_VALUE; pu.. 2023. 5. 15.
[백준 14627 / 파닭 파닭 / JAVA / 이분 탐색] https://www.acmicpc.net/problem/14627 14627번: 파닭파닭 첫째 줄에 승균이가 시장에서 사 온 파의 개수 S(1 ≤ S ≤ 1,000,000), 그리고 주문받은 파닭의 수 C(1 ≤ C ≤ 1,000,000)가 입력된다. 파의 개수는 항상 파닭의 수를 넘지 않는다. (S ≤ C) 그 후, S 줄에 www.acmicpc.net 문제 접근 파 길이 배열로 만들어서 입력 저장된 파 길이들을 현재 파 길이(mid)로 나눠서 치킨 몇 마리(count) 만들 수 있는지 검사 count가 만들어야 하는 치킨 수(C)보다 크거나 같으면 더 긴 파 길이를 탐색하기 위해 left를 당기고 그 때의 파 길이(mid)를 저장 치킨 수 보다 작다면 파 길이를 줄여서 원하는 치킨 수를 충족하기 위.. 2023. 5. 12.
[백준 2776 / 암기왕 / JAVA / 이분 탐색] https://www.acmicpc.net/problem/2776 2776번: 암기왕 연종이는 엄청난 기억력을 가지고 있다. 그래서 하루 동안 본 정수들을 모두 기억 할 수 있다. 하지만 이를 믿을 수 없는 동규는 그의 기억력을 시험해 보기로 한다. 동규는 연종을 따라 다니며, www.acmicpc.net 문제 접근 출력 시간 때문에 StringBuilder 활용 List에 노트1의 숫자들을 저장 후 정렬 이후 M 크기의 노트2 숫자들을 검사하는 반복문 실행 입력한 값보다 노트1 인덱스의 숫자가 크면 더 작은 값을 탐색하기 위해 right 감소 숫자가 작으면 더 큰 값을 탐색하기 위해 left 증가 같다면 1을 StringBuilder에 저장, 다르다면 0을 저장하고 반복문 종료 후 저장한 StringB.. 2023. 5. 11.