Seren dev's blog
article thumbnail
[백준] 4920번 : 테트리스 게임 - 자바[Java]

https://www.acmicpc.net/problem/4920 4920번: 테트리스 게임 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 표의 크기 N이 주어지고, 4 ≤ N ≤ 100을 만족한다. 둘째 줄부터 표에 쓰여 있는 숫자가 주어진다. 숫자는 절댓 www.acmicpc.net 풀이 5가지 조각으로 배치할 수 있는 모든 도형의 경우의 수(총 13가지)를 배열로 지정하여 풀었다. 주의할 점 - n을 입력받을 때와 NxN 표를 입력받을 때 trim()을 해주어야 한다. - 표에 쓰이는 숫자는 절댓값이 1,000,000을 넘지 않는 정수이다. 즉, 음수가 입력될 수 있으므로 초기 max값을 Integer.MIN_VALUE로 초기화한다. 코드 import java.i..

article thumbnail
[백준] 15886번 : 내 선물을 받아줘 2 - 자바[Java]

https://www.acmicpc.net/problem/15886 15886번: 내 선물을 받아줘 2 욱제는 구사과의 열렬한 팬이다. 오늘 욱제는 구사과에게 선물()을 전달해주려고 한다. 지난 며칠간의 관찰 끝에 욱제는 구사과의 이동 패턴을 모두 파악했다. 구사과가 있는 곳은 1×N 크기의 직 www.acmicpc.net 풀이 처음 문제를 봤을 때는 BFS 알고리즘을 생각했다. 같은 위치를 다시 방문하면 안되기 때문에 boolean[] visited 방문 배열을 사용해야겠다고 생각했다. 하지만 단순한 방문배열이 아닌, 현재 탐색 단계와 이전 탐색 단계를 구분하는 방문 배열이 필요하다. ex) EEW W EW - 인덱스가 3인 W부터 시작해서 탐색할 때 왼쪽의 EEW와 합쳐진다. 따라서 카운트하지 않는다..

article thumbnail
[백준] 1283번 : 단축키 지정 - 자바[Java]

https://www.acmicpc.net/problem/1283 1283번: 단축키 지정 첫째 줄에 옵션의 개수 N(1 ≤ N ≤ 30)이 주어진다. 둘째 줄부터 N+1번째 줄까지 각 줄에 옵션을 나타내는 문자열이 입력되는데 하나의 옵션은 5개 이하의 단어로 표현되며, 각 단어 역시 10개 이하 www.acmicpc.net 풀이 1. 옵션이 입력될 때마다 아래의 로직대로 단축키를 찾는다. 1-1. split으로 단어들을 저장하여 각 단어의 첫글자가 단축키로 지정될 수 있는지 확인한다. 1-2. 2번에서 단축키를 구하지 못했다면 옵션에서 각 단어의 첫글자를 제외하고, 왼쪽에서 차례대로 글자들을 보면서 단축키가 가능한 글자를 찾는다. 1-3. 어떠한 것도 단축키로 지정할 수 없으면 옵션 그대로의 문자열을 ..

article thumbnail
[백준] 17276번 : 배열 돌리기 - 자바[Java]

https://www.acmicpc.net/problem/17276 17276번: 배열 돌리기 각 테스트 케이스에 대해 회전 연산을 마친 후 배열의 상태를 출력한다. n줄에 걸쳐 각 줄에 n개의 정수를 공백으로 구분하여 출력한다. www.acmicpc.net 풀이 1 ≤ T ≤ 10 1 ≤ n 0 ≤ |d| / 45 ≤ 8 d O(T*n^2) 코드 import java.util.*; import java.io.*; public class Main { public static void main(St..

article thumbnail
[프로그래머스] Lv.2 : 주차요금계산 - 자바[Java]

https://school.programmers.co.kr/learn/courses/30/lessons/92341 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 주차장의 요금표와 차량이 들어오고(입차) 나간(출차) 기록이 주어졌을 때, 차량별로 주차 요금을 계산해야 한다. 이 때 차는 여러번 입출차를 할 수 있으므로, 각 차의 누적 주차 시간을 계산해서 최종적으로 요금을 계산해야 한다. 먼저 문제를 풀기위한 자료구조는 다음과 같다. 차 번호는 고유하므로 차 번호를 Key로, 차의 정보를 Value로 하는 Map을 생성한다. static class C..

article thumbnail
[백준] 16719번 : ZOAC - 자바[Java]

https://www.acmicpc.net/problem/16719 16719번: ZOAC 2018년 12월, 처음 시작하게 된 ZOAC의 오프닝을 맡은 성우는 누구보다 화려하게 ZOAC를 알리려 한다. 앞 글자부터 하나씩 보여주는 방식은 너무 식상하다고 생각한 성우는 문자열을 보여주는 새로 www.acmicpc.net 풀이 문자열의 길이는 최대 100자이므로 n startIdx) { startIdx = data.idx; check[data.idx] = true; print(check, str); } } // update startIdx // 마지막 위치부터 앞으로 가면서 문자가 체크되어있는지 연속적으로 확인한 후, 체크하지 않은 문자가 있을 시 break int i = list.size() - 1; f..

article thumbnail
[백준] 21608번 : 상어 초등학교 - 자바[Java]

https://www.acmicpc.net/problem/21608 21608번: 상어 초등학교 상어 초등학교에는 교실이 하나 있고, 교실은 N×N 크기의 격자로 나타낼 수 있다. 학교에 다니는 학생의 수는 N2명이다. 오늘은 모든 학생의 자리를 정하는 날이다. 학생은 1번부터 N2번까지 번호 www.acmicpc.net 풀이 먼저 각 학생마다 좋아하는 학생의 번호를 저장해야 하므로 Map 자료구조를 사용하여 key 값은 학생 번호, value는 ArrayList로 학생이 좋아하는 학생의 번호들을 저장했다. 이 때 단순 HashMap이 아닌 LinkedHashMap을 사용한 이유는, 정해진 순서대로 학생들의 자리를 배치해야 하므로 순서를 유지해야 하기 때문이다. HashMap은 값이 들어가는 순서를 보장..

article thumbnail
[백준] 14719번 : 빗물 - 자바[Java]

https://www.acmicpc.net/problem/14719 14719번: 빗물 첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500) 두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치 www.acmicpc.net 풀이 처음에는 맨 왼쪽의 블록을 제외하고, 각 블록들을 순차적으로 탐색하다가 맨 왼쪽의 블록과 높이가 같거나 큰 블록이 있는 경우 그 부분을 잘라서 그 안에서 고이는 빗물의 총량을 구하는 방식으로 생각했다. 즉, 빗물이 고이는 부분이 생길 때마다 배열을 잘라서 각 부분마다 빗물의 총량을 구하는 방식을 생각했다. 그리고 각 부분에 대해 각 블록들마다, 양 끝단의 블록들과의 차이를 ..

article thumbnail
[백준] 20164번 : 홀수 홀릭 호석 - 자바[Java]

https://www.acmicpc.net/problem/20164 20164번: 홀수 홀릭 호석 호석이는 짝수랑 홀수 중에서 이니셜이 같은 홀수를 더 좋아한다. 운전을 하던 호석이는 앞차의 번호판이 홀수로 가득할 때 사랑스러움을 느낄 정도이다. 전화번호도 홀수만 있고 싶다. 그렇게 www.acmicpc.net 풀이 위 문제는 다음과 같은 연산을 반복한다. 입력받은 숫자 -> 홀수 개수 카운트 숫자를 짜름 -> 짜른 각각의 숫자를 모두 더한 숫자 -> 홀수 개수 카운트한 다음 이전 카운트에 더함 숫자의 홀수 개수를 카운트한 다음 이전 카운트에 더하는 로직이 반복되므로, 재귀호출 또는 반복문을 사용해야 한다. 또한 만들 수 있는 모든 경우의 수를 구해 그중 최솟값과 최댓값을 구해야 한다. 즉, 재귀호출을 ..

article thumbnail
[백준] 15787번 : 기차가 어둠을 헤치고 은하수를 - 자바[Java]

https://www.acmicpc.net/problem/15787 15787번: 기차가 어둠을 헤치고 은하수를 입력의 첫째 줄에 기차의 수 N(1 ≤ N ≤ 100000)과 명령의 수 M(1 ≤ M ≤ 100000)가 주어진다. 이후 두 번째 줄부터 M+1번째 줄까지 각 줄에 명령이 주어진다. www.acmicpc.net 풀이 기차의 상태를 저장하는 2차원 배열을 선언한 후, 입력하는 명령에 따라 기차의 상태를 변경하면 된다. 그 후 모든 기차를 탐색하여 기차의 상태가 중복되는게 있는지 검사한다. 로직 1. n과 m을 입력받는다. 2. 기차의 상태를 저장하는 boolean형 2차원 배열 train을 선언하고, n X 20 크기로 할당한다. 승객이 앉아있으면 해당 위치에 true, 승객이 없으면 fals..

article thumbnail
[백준] 2615번 : 오목 - 자바[Java]

https://www.acmicpc.net/problem/2615 2615번: 오목 오목은 바둑판에 검은 바둑알과 흰 바둑알을 교대로 놓아서 겨루는 게임이다. 바둑판에는 19개의 가로줄과 19개의 세로줄이 그려져 있는데 가로줄은 위에서부터 아래로 1번, 2번, ... ,19번의 번호 www.acmicpc.net 풀이 바둑판의 상태를 입력받은 후, 검은색 또는 흰색이 이기는지 출력하고 가장 왼쪽에 있는 바둑알의 위치를 출력한다. 로직 1. 바둑판의 상태를 입력받는다. 2. 이중 for문을 사용하여 바둑판을 왼쪽 위부터 탐색하고, 바둑알이 놓인 위치인 경우 check 함수를 호출하여 오목이 된 경우 검은색이 이겼을 경우에는 1을, 흰색이 이겼을 경우에는 2를 출력한다. 그리고 현재 위치를 출력하고 프로그램을..

article thumbnail
[백준] 22858번 : 원상 복구 (small) - 자바[Java]

https://www.acmicpc.net/problem/22858 22858번: 원상 복구 (small) 수가 적혀있는 $P_1, P_2, ..., P_N$ $N$개의 카드가 있다. 1부터 N까지 수가 하나씩 존재하는 $D_1, D_2, ... , D_i , ... D_N$ 가 있다. 이때 $D_i$는 $P_{D_i}$ 값을 $i$ 번째로 가지고 오는 것을 의미한다. 이러한 www.acmicpc.net 위 방식을 그대로 K번 섞은 카드의 정보와 D의 정보를 알고 있다고 할 때, 원래 카드는 어떤 배치를 이루고 있었는지 구해보자. 입력 첫번째 줄에는 카드의 개수 N과 카드를 섞은 횟수인 K가 공백으로 구분되어 주어진다. 두번째 줄에는 K번 카드를 섞은 후 카드의 배치를 의미하는 Si가 공백으로 구분되어 ..