코딩테스트/백준 18

[Java] 백준 20207번 - 달력

문제 링크 : https://www.acmicpc.net/problem/20207 코팅지의 면접 조건 코팅지 규칙 연속된 두 일자에 각각 일정이 1개 이상 있다면 이를 일정이 연속되었다고 표현한다. 연속된 모든 일정은 하나의 직사각형에 포함되어야 한다. 연속된 일정을 모두 감싸는 가장 작은 직사각형의 크기만큼 코팅지를 오린다. 달력 규칙 일정은 시작날짜와 종료날짜를 포함한다. 시작일이 가장 앞선 일정부터 차례대로 채워진다. 시작일이 같을 경우 일정의 기간이 긴 것이 먼저 채워진다. 일정은 가능한 최 상단에 배치된다. 일정 하나의 세로의 길이는 1이다. 하루의 폭은 1이다. 입력 첫번째 줄 : N(일정의 개수, 1 ≤ N ≤ 1,000) 두번째 줄 ~ S : 시작 날짜 E : 종료 날짜 1 ≤ S ≤ E ..

[Java] 백준 15961번 - 회전 초밥

문제 링크 : https://www.acmicpc.net/problem/15961 손님이 먹을 수 있는 초밥 가짓수의 최댓값 조건 초밥은 한 방향으로 회전 같은 종류의 초밥이 있을 수 있음 입력 첫번째 줄 N : 회전 초밥 벨트에 놓인 접시의 수(2 ≤ N ≤ 3,000,000) d : 초밥의 가짓수(2≤d≤3,000) k : 연속해서 먹는 접시의 수(2≤k≤3,000, k≤N) c : 쿠폰 번호(1 ≤ c ≤ d) 두번째 줄부터~ 초밥의 종류 1 ~ d 사이의 정수 출력 손님이 먹을 수 있는 초밥 가짓수의 최댓값 로직 1) import java.util.*; import java.util.stream.Collectors; public class Main { public static void main(S..

[Java] 백준 14925번 - 목장 건설하기

문제 링크 : https://www.acmicpc.net/problem/14925 땅을 지을 수 있는 가장 큰 정사각형 목장의 한 변의 크기 L 출력하기 조건 땅에 나무와 돌이 있으면 농장을 지을 수 없음 땅에 정사각형의 목장을 지을 때 가장 큰 목장 짓기 입력 첫번째 줄 땅의 세로 M, 땅의 가로 N 1 ≤ M ≤ 1000 1 ≤ N ≤ 1000 나머지 M x N 크기의 행렬 행렬의 원소 0 : 들판 행렬의 원소 1 : 나무 행렬의 원소 2 : 돌 출력 L 출력하기 찾아낸 규칙 행렬을 순회하면서 정사각형을 DP형태로 구하기 로직 1) import java.io.*; import java.util.*; // 목장 건설하기 public class Main { public static void main(St..

[Java] 백준 22871번 - 징검다리 건너기(large)

문제 링크 : https://www.acmicpc.net/problem/22871 가장 왼쪽 돌에서 출발하여 가장 오른쪽에 있는 돌로 건너갈 수 있는 모든 경우 중 K의 최솟값 구하기 조건 왼쪽 → 오른쪽으로만 이동 i번째 돌 → j번째 돌 (i < j) 이동할 때 사용되는 힘 = (j - i) X (1 + |Ai - Aj|) K : 나열된 돌을 전부 건널 때 사용하는 힘의 최댓값 입력 첫번째 줄 N : 돌의 개수 2 ≤ N ≤ 5,000 두번째 줄 Ai : N개의 돌의 수가 공백으로 구분되어 있음 1 ≤ Ai ≤ 1,000,000 출력 K의 값 로직 1) 이동할 때 필요한 모든 경우의 힘의 크기 구하기 모든 경우의 K 값을 구하고 그 중 가장 작은 값 출력하기 import java.util.*; imp..

[Java] 백준 5639번 - 이진 검색 트리

문제 링크 : https://www.acmicpc.net/problem/5639 이진 검색 트리의 전위 순회한 결과를 통해서 후쉬 순회한 결과 출력하기 조건 노드의 왼쪽 서브 트리는 노드보다 작다 노드의 오른쪽 서브 트리는 노드보다 크다 입력 이진 검색 트리의 전위 순회한 결과 0 ≤ 노드의 키 값 ≤ 10^6 노드의 키 값 : 정수 노드의 수 ≤ 10,000 중복된 노드의 키는 존재 X 출력 이진 검색 트리의 후위 순회한 결과 로직 1) node를 이용해서 tree 구현하기 입력값이 추가될 위치를 알기 위해서 stack 구현하기 stack는 Node 클래스 객체 저장 입력값을 통해서 이진 검색 트리 구하기 첫번째 값은 루트 입력값이 stack의 마지막값보다 작은 경우 stack의 마지막의 왼쪽 노드에 ..

[Java] 백준 9432번 - 염색체

문제 https://www.acmicpc.net/problem/9342 염색체의 특정 패턴 파악하기 조건 염색체의 특정 패턴 { A, B, C, D, E, F } 중 0 또는 1개로 시작 다음 문자는 A가 1개 이상 존재해야 함 다음 문자는 F가 1개 이상 존재해야 함 다음 문자는 C가 1개 이상 존재해야 함 마지막 문자열 규칙은 { A, B, C, D, E, F } 중 0 또는 1개가 있어야 함 입력 첫번째 줄 - 테스트 케이스의 개수 T (T ≤ 20) 두번째 줄부터 ~ 테스트 케이스 테스트 케이스 ≤ 200 대문자(A ~ Z)로만 이루어진 문자열 출력 테스트 케이스가 염색체의 특정 패턴인 경우 : Infected! 테스트 케이스가 염색체의 특정 패턴이 아닌 경우 : Good! 로직 1) 첫번째 문자..

[Java] 백준 15685번 - 드래곤 커브

문제 드래곤 커브의 꼭짓점으로 만들 수 있는 1x1 크기의 정사각형의 개수 구하기 조건 0세대 드래곤 : x 또는 y 방향으로 1칸 이동 다음 세대 드래곤 : 이전 세대의 마지막 시점에서 이때까지 이동한 경로를 시계방향 90도로 회전시킨만큼 이 100 x 100 격자 안에만 드래곤 커브가 존재한다. 0 ≤ x ≤ 100 0 ≤ y ≤ 100 입력 첫번째 줄 : 드래곤 커브의 개수 N 두번째 줄 ~ N+1번쨰 줄 : x y d g 드래곤 커브의 시작 시점 x y 드래곤의 시작방향 d 0 : x방향 → 1 : y방향 ↑ 2 : x방향 ← 3 : y방향 ↓ g세대 찾아낸 규칙 다음 세대로 갈 때 마지막 위치에서 시계방향 90도 회전하면 이전 회전방향의 역순서대로 반시계방향의 90도로 회전한다. 0세대 드래곤 ..

[Java] 백준 19583번 - 싸이버개강총회

문제 개강총회 출석부 관리 입장과 퇴장이 전부 확인 된 학생 수 구하기 조건 00:00 ~ 개강총회 시작시점에 채팅 기록이 있는 학생 → 입장 확인 개강총회 종료 시점 ~ 스트리밍 종료 시점에 채팅 기록이 있는 학생 → 퇴장 확인 스트리밍 종료 시점 이후 채팅 기록은 인정 X S : 개강총회 시작 시간 E : 개강총회 종료 시간 Q : 스트리밍 종료 시간 시간 형태 : HH:MM 로직 1) 입력이 있을 때까지 반복 00:00 ~ S 사이 시간에 채팅을 남긴 학생을 ArrayList인 startStudent에 추가하기 E ~ Q 사이 시간에 채팅을 친 학생 중 start에 포함된 학생이면 구하려는 학생수 count 수 증가하기 count 출력하기 package backjoon; import java.io...