본문 바로가기

ALGORITHM

(212)
백준 16935 배열 돌리기 3 (Java) 1. 문제 링크 16935번: 배열 돌리기 3 크기가 N×M인 배열이 있을 때, 배열에 연산을 R번 적용하려고 한다. 연산은 총 6가지가 있다. 1번 연산은 배열을 상하 반전시키는 연산이다. 1 6 2 9 8 4 → 4 2 9 3 1 8 7 2 6 9 8 2 → 9 2 3 6 1 5 1 8 3 4 2 9 → www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 문제가 요구하는 연산이 6개나 되기 때문에 각각을 메서드로 구현했다. 기존 배열의 원소를 새로운 배열의 원소로 넣고 출력했다. 1, 2번 연산은 반전이기 때문에 원하는 위치는 배열 길이 - 지금 원소의 인덱스 -1을 하면된다. 1번 연산은 x좌표의 값을 원하는 위치에 넣어주면 된다. 2번 연산은 y좌표의 값을 원하는 위치에 넣어주면..
백준 16926 배열 돌리기 1 (Java) 1. 문제 링크 16926번: 배열 돌리기 1 크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다. A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑ A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5] www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 입력을 다 받고 나서 어떻게 구현해야 할지 고민했다. 일단 방향을 바꾸면서 돌아야 하니까 방향벡터를 사용하기로 했다. 주어진 예제를 통해 회전은 N과 M 중 작은 숫자의 반만큼 돈다는 사실을 알 수 있다. 회전은 한 겹씩 하기 때문에 반복문을 0부터 시작해서 회전 횟수만큼 돌렸다. 돌리는 과정에서 시작과 끝을 따로..
백준 13458 시험 감독 (Java) 1. 문제 링크 13458번: 시험 감독 첫째 줄에 시험장의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 각 시험장에 있는 응시자의 수 Ai (1 ≤ Ai ≤ 1,000,000)가 주어진다. 셋째 줄에는 B와 C가 주어진다. (1 ≤ B, C ≤ 1,000,000) www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 시험장마다 총감독이 한명씩은 있어야 한다는 점만 안다면 문제를 잘 풀 수 있다. 각 시험장의 학생 수에서 감독이 볼 수 있는 수를 뺀다. 그러고 남은 학생수에서 부감독이 볼 수 있는 만큼의 수로 나눴을 때 나머지가 있으면 부감독이 더 필요하다는 얘기다. 4. 코드 import java.io.BufferedReader; import java.io.IOE..
백준 1991 트리 순회 (Java) 1. 문제 링크 1991번: 트리 순회 첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파 www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 트리의 노드를 나타낼 노드 클래스를 만든다. 여기서 노드 클래스는 자기 알파벳 + 왼쪽 노드 + 오른쪽 노드로 구성되어 있다. 입력받기 전에 문제에 따라 알파벳 순으로 배열에 넣어둔다. (순차적으로 넣기 위해 char를 사용했다.) 입력을 받으면서 왼쪽 자식과 오른쪽 자식을 노드 클래스의 left와 right에 넣는다. 재귀를 이용해 각각 전위, 중위, 후위 순회를 하면 끝이다. 4. 코드 im..
백준 1158 요세푸스 문제 (Java) 1. 문제 링크 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 큐에 1부터 N까지의 수를 먼저 넣는다. 반복문에서 K보다 작은 경우에는 큐에서 빼서 다시 넣는다. 큐의 크기가 1이 되면 끝내면 된다. 4. 코드 package com.ssafy.daily06; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Queue; import java.util.Scanner; public class Main { private static StringBuilder sb = new Strin..
백준 10866 덱 (Java) 1. 문제 링크 10866번: 덱 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 ArrayDeque 자료구조를 이용해 구현했다. 4. 코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayDeque; public class Main { public static void main(String[] args) throws Exception { BufferedReader ..
백준 10972 다음 순열 (Java) 1. 문제 링크 10972번: 다음 순열 첫째 줄에 입력으로 주어진 순열의 다음에 오는 순열을 출력한다. 만약, 사전순으로 마지막에 오는 순열인 경우에는 -1을 출력한다. www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 그냥 순열로 문제를 풀게 될 경우 N이 너무 커서 시간초과가 발생한다. 그래서 규칙을 찾는데 한참 걸렸다.. 온갖 방법을 총동원해서 찾은 규칙이다. 항상 순열의 뒤에서부터 바뀌는 범위가 넓어진다. ex) 1 2 3 4 -> 1 2 3 4 -> 1 3 2 4 -> 1 3 4 2 -> 1 4 2 3 -> 1 4 3 2 -> 2 1 3 4 뒤에서부터 오름차순을 확인하면서 처음으로 오름차순이 아닌 값(now)을 찾는다. 만약 뒤에서부터 처음까지 전부 오름차순일 경우, 다음 ..
백준 9655 돌 게임 (Java) 1. 문제 링크 9655번: 돌 게임 상근이가 게임을 이기면 SK를, 창영이가 게임을 이기면 CY을 출력한다. www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 문제에서 시작이 상근이라는 것과 1개 또는 3개의 돌만 가져갈 수 있다는 점에 주목했다. 돌이 1개인 경우, 상근이가 이긴다. (1) 돌이 2개인 경우, 창영이가 이긴다. (1 -> 1) 돌이 3개인 경우, 상근이가 이긴다. (3) 돌이 4개인 경우, 창영이가 이긴다. (1 -> 3) (3 -> 1) 돌이 5개인 경우, 상근이가 이긴다. (1 -> 1 -> 3) (1 -> 3 -> 1) 이런 식으로 주어진 돌이 홀수라면 상근이가, 짝수라면 창영이가 이기는 규칙을 알 수 있다. 4. 코드 import java.io.Buffere..