분류 전체보기 176

[백준/Java] 13335번 : 트럭

✏️ 문제 분석https://www.acmicpc.net/problem/13335트럭 n개가 다리를 건너감트럭 순서 변경 불가 다리 위에 트럭 w대가 동시에 올라갈 수 있음다리 길이 w 트럭은 1 단위 시간에 1 단위 길이 만큼 이동할 수 있음다리 최대 하중은 L 모든 트럭이 다리를 건너는 최단 시간을 구하는 문제✏️ 구현 아이디어4 2 10 //n w L7 4 5 6 //트럭의 무게1. 차례로 트럭 보내기트럭의 순서를 바꿀 수 없으므로앞에서부터 하나씩 트럭을 다리에 보내야 한다. 먼저 무게 7인 트럭을 보낸다. 2. 다리의 하중(L)을 넘지 않는지 확인다리에 최대 2개의 트럭을 올릴 수 있으므로다음 트럭인 무게 4인 트럭을 보낼지 말지 결정해보자. 다리의 하중(L)을 넘으면 못 보낸다.7+4 > 10 ..

코테 2025.01.17

[백준/Java] 2503번 : 숫자 야구

✏️ 문제 분석https://www.acmicpc.net/problem/2503 게임 룰 : 영수가 생각한 숫자를 민혁이가 맞춰야 한다.두 사람이 부른 세 자리 숫자(1~9로 구성, 서로 다른 세 숫자)를 비교하여값과 위치가 모두 같으면 스트라이크값은 같은데 위치가 다르면 볼3스트라이크가 되면 게임 끝아니면 다시 게임 진행 구해야할 것 :민혁이가 부른 숫자와 영수의 대답을 가지고영수가 생각한 숫자일 가능성이 있는 수가 총 몇 개인지 구하라.영수의 답에는 모순이 없다고 가정한다.✏️ 구현 아이디어민혁: 123영수: 1 스트라이크 1 볼.민혁: 356영수: 1 스트라이크 0 볼.민혁: 327영수: 2 스트라이크 0 볼.민혁: 489영수: 0 스트라이크 1 볼.👉🏻첫 번째 게임영수가 생각할 수 있는 숫자는..

코테 2025.01.15

[백준/Java] 13567번 : 로봇

✏️ 문제 분석https://www.acmicpc.net/problem/13567 로봇의 처음 위치는 (0, 0)이고 동쪽으로 향하면서 시작TURN 0 : 왼쪽으로 90도 회전TURN 1 : 오른쪽으로 90도 회전MOVE d : d만큼 앞으로 이동 (d>0)명령이 n개 주어졌을 때, 최종 위치를 구하라.(로봇이 MxM 영역 밖을 이탈하면 -1을 출력)✏️ 구현 아이디어MOVE 6 TURN 0 MOVE 5 TURN 0MOVE 2 TURN 0MOVE 2 TURN 0MOVE 4 TURN 0MOVE 3MOVE 2 TURN과 MOVE를 묶어서 보면 어느 쪽으로 TURN한 다음에 몇 칸 만큼 MOVE했는지를 하나의 동작으로 계산할 수 있다. TURN 0이면 회전 방향이 오른쪽 -> 위 -> 왼쪽 -> 아래 순서로,..

코테 2025.01.14

[백준/Java] 2096번 : 내려가기

✏️ 문제 분석https://www.acmicpc.net/prablem/2096N개의 줄에 숫자가 세 개씩 주어지고, 세 개 중 하나를 고르면서 아래로 내려가는 게임을 한다.다음 줄의 숫자로 내려갈 때는, 바로 아래 또는 바로 아래와 인접한 수로만 내려갈 수 있다.얻을 수 있는 최대 점수, 최소 점수를 구하여라.✏️ 구현 아이디어31 2 34 5 64 9 0 숫자표를 이차원 배열 dp라고 했을 때, 두 번째 줄 이상(n>0)에서 다음과 같은 규칙이 적용된다.dp[n][0]은 dp[n-1][0], dp[n-1][1]dp[n][1]은 dp[n-1][0], dp[n-1][1], dp[n-1][2]dp[n][2]은 dp[n-1][1], dp[n-1][2]로부터 내려올 수 있다.dp[0][0]dp[0][1]dp[..

코테 2025.01.13

[백준/Java] 1149번 : RGB 거리

✏️ 문제 탐색https://www.acmicpc.net/problem/1149 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 주어질 때, N개의 집을 어떤 색으로 칠해야 비용이 최소가 되는지 구하라.단, 인접한 집의 색은 달라야 한다.✏️ 구현 아이디어첫 번째 집부터 차례로 색을 정할 때, 이전 집의 색이 다음 집의 색 선택에 영향을 미친다.이 원리를 이용하여 각 집의 색을 R, G, B로 선택했을 때 비용의 최솟값을 구해보자.630 19 564 77 6415 19 974 71 5790 86 8493 32 910행(첫 번째 집):첫 집은 이전 집이 없으므로 각 색을 선택했을 때 최소 비용이 그대로이다.30 195 1행(두 번째 집):(1, 0)은 (0, 1) 또는 (0, 2) 다음으로 선택될 수 있다...

코테 2025.01.12

[백준/Java] 14430번 : 자원 캐기

✏️ 문제 탐색https://www.acmicpc.net/problem/14430 NxM 행렬을 오른쪽, 아래쪽 방향으로만 탐색한다.(0, 0)에서 (N-1, M-1)까지 탐색할 때, 최대한 많이 수집할 수 있는 광석(1)의 개수를 구하라. ✏️ 구현 아이디어5 40 1 0 00 0 1 01 1 0 01 0 1 01 1 0 0 로봇이 이동하는 방향은 오른쪽, 아래 뿐이다.그러므로 어떤 한 좌표에 로봇이 도달하려면 왼쪽 또는 위쪽에서 오는 경로밖에 없다. 따라서 어떤 좌표에 도달했을 때 '로봇이 최대로 얻을 수 있는 광석의 개수'는(왼쪽 좌표가 최대로 가질 수 있는 광석의 개수, 위쪽 좌표가 최대로 가질 수 있는 광석의 개수 중 더 큰 값) + (현재 좌표에 있는 광석 개수)가 된다.  즉 위 예시의 경우..

코테 2025.01.11

[백준/Java] 9095번 : 1, 2, 3 더하기

✏️ 문제 탐색https://www.acmicpc.net/problem/90951, 2, 3의 합으로 N을 만드는 경우의 수를 구하는 문제이다.✏️ 구현 아이디어일단 각 경우의 수를 구해 보았다. 어떤 규칙이 보이는 것 같다. n=1 : {1} 1개n=2 : {11, 2}  2개n=3 : {111, 12, 21, 3} 4개n=4 : {1111, 112, 121, 211, 22, 13, 31} 7개여기서 n=4를 앞에서 구한 n=1, n=2, n=3을 사용해 표현할 수 있을 것 같다.표로 정리해서 점화식을 도출해보자. N방법의 수케이스111221+1, 2341+1+1, 1+2, 2+1, 347( 1+1+1+1, 1+1+2, 1+2+1, 1+3 ), (2+1+1, 2+2), (3+1)513(1+1+1+1+1..

코테 2025.01.10

[디자인 패턴] 빌더패턴 (Builder Pattern)

빌더 패턴은 클래스의 객체를 만들 때, 선택적 매개변수가 많은 경우 유용하다.class Student { private String name; private int age; private int number;}이 Student 클래스의 객체를 만들 때, 생성자/Setter/빌더 중 뭘 사용해야 좋을까? 1. 점층적 생성자 패턴다양한 매개변수를 입력받아서 인스턴스를 생성하고싶을 때마다 사용하던 생성자를 오버로딩하는 방법도 있다. 이것을 '점층적 생성자 패턴(Telescoping Constructor Pattern)'이라고 한다. class Student { private String name; private int age; private int number; publi..

CS 2025.01.10

[백준/Java] 10026번 : 적록색약

✏️ 문제 탐색https://www.acmicpc.net/problem/10026 NxN 격자판에서 같은 색이 상하좌우로 인접해 있으면 같은 구역으로 세는 문제이다.단, 적록색약은 R(빨강)과 G(초록)을 같은 색으로 인식한다.적록색약인 경우, 아닌 경우 각각 구역의 개수를 출력한다.RRRBBGGBBBBBBRRBBRRRRRRRR 위의 예제의 경우,적록색약 O : 총 3구역 인식 (R-G 2, B 1)적록색약 X : 총 4구역 인식 (R 2, B 1, G 1) ✏️ 구현 아이디어 1. 적록색약이 아닌 경우5RRRBBGGBBBBBBRRBBRRRRRRRRNxN 그리드의 (0, 0) 좌표부터 차례로 탐색을 시작한다. (0, 0)의 색상은 R이다.이 부분과 상하좌우로 인접한 R들을 찾아서 모두 방문처리한다.그러면..

코테 2025.01.09

[백준/Java] 27737번 : 버섯 농장

✏️ 문제 탐색https://www.acmicpc.net/problem/27737 이번 문제는 설명이 길어서 조건을 파악하기 쉽게 요약해보았다.NxN 나무판에 M개의 버섯 포자를 심는다.버섯이 자랄 수 있는 칸과 자랄 수 없는 칸이 있는데, 자랄 수 있는 칸에만 심을 수 있다.심어진 버섯 포자는 심어진 칸을 포함해 K개의 상하좌우로 연결된 칸에 자란다.한 칸에 x개를 겹쳐서 심는다면 심어진 칸을 포함해 K*x개의 상하좌우로 연결된 칸에 자란다.M개의 버섯 포자 중 최소 개수를 사용하여 농사가 가능한지 불가능한지 출력하라.농사가 가능하다는 것의 의미는 다음과 같다.버섯 포자를 하나라도 사용하였음버섯이 자랄 수 있는 모든 칸에 버섯이 전부 자람농사가 가능하다면 POSSIBLE을 출력하고, 다음 줄에 남은 버..

코테 2025.01.08