my study.

백준 25

[백준] 14891 톱니바퀴, java

14891번: 톱니바퀴총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴www.acmicpc.net문제 간단 설명 네 개의 톱니바퀴가 존재하며 각 톱니바퀴를 회전시킵니다. 톱니바퀴가 회전할 때 인접한 곳에 있는 톱니바퀴와 만나는 부분의 자석 극이 다르다면 함께 회전하게 됩니다. 톱니바퀴를 여러 번 회전 시킨 후 톱니바퀴의 상태를 확인하는 문제입니다.문제 풀이 이번 문제도 구현 문제로 톱니바퀴의 모양을 어떻게 코드로 표현하며, 이를 어떻게 회전시키는지 생각할 수 있는지 보는 문제 입니다.코드package com.baekjoon.gold;import java.io...

[백준] 14888 연산자 끼워넣기, java

14888번: 연산자 끼워넣기첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net문제 간단 설명 주어진 수와 주어진 연산자의 개수를 가지고 구할 수 있는 최댓값, 최솟값을 구하는 문제입니다. 주어진 수의 배치는 변경할 수 없으며, 연산은 무조건 왼쪽부터 시행한다는 조건이 가지고 있어 그렇게 어려워 보이지는 않는 문제였습니다.문제 풀이 저는 dfs를 이용하여 풀어보았습니다. 생각을 떠오르기 전에는 뭔가 힘들었는데 dfs로 풀면 되겠다라고 떠오르고 나니 생각보다 쉽게 해결을 한 문제입니다. 사실..

[백준] 14503 로봇 청소기, java

14503번: 로봇 청소기첫째 줄에 방의 크기 $N$과 $M$이 입력된다. $(3 \le N, M \le 50)$  둘째 줄에 처음에 로봇 청소기가 있는 칸의 좌표 $(r, c)$와 처음에 로봇 청소기가 바라보는 방향 $d$가 입력된다. $d$가 $0$인 경우 북쪽www.acmicpc.net문제 간단 설명 보드가 주어지고 로봇청소기가 이동하며 먼지를 청소합니다. 몇칸의 먼지를 청소 할 수 있는치 카운트 하는 문제입니다.문제 풀이 특별한 알고리즘이 필요하다기 보다는 문제에서 주어진 대로 구현하는 문제입니다. 보드 안에서 네 방향의 탐색을 할 수 있다면 풀 수 있는 문제입니다.코드package com.baekjoon.gold;import java.io.BufferedReader;import java.io.I..

[백준] 14499 주사위 굴리기, java

14499번: 주사위 굴리기첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x, y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지www.acmicpc.net문제 간단 설명 각 면에 숫자를 가진 주사위가 보드를 이동하며 숫자들을 변경합니다. 이 때 주사위가 이동할 때마다 주사위의 상단에 있는 숫자를 출력해야합니다.문제 풀이 특별한 알고리즘이 필요한 문제는 아니었습니다. 주사위의 이동을 어떻게 표현할지 생각할 수 있다면 풀 수 있는 백준의 골드 난이도 치고는 쉬운 문제라고 생각합니다. 코드package com.baekjoon.gold;import java.io..

[백준] 2096 내려가기, java

2096번: 내려가기첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 숫자가 세 개씩 주어진다. 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 중의 하나가 된다.www.acmicpc.net문제 간단 설명세로 길이 N 가로길이 3을 가진 표가 존재하며 각 층마다 세 개의 수가 존재합니다. 각 세 개의 수는 그 다음 층(아래층)으로 내려갈 때에 바로 아래 또는 바로 아래의 수와 붙어있는 수로만 이동할 수 있습니다.별표는 현재 위치, 그리고 파란 동그라미가 갈 수 있는 위치 입니다. 그렇다면 숫자 표가 주어졌을 때 가장 아래층에 도달 할 수 있는 최대수, 최소수를 구하시오.문제 풀이저는 DP를 이용해 푸는 방식을 생각했습니다. 각 위치별로 갈 수 있는 위치가 정해져 있으..

[백준] 9019 DSLR, java

9019번: DSLR네 개의 명령어 D, S, L, R 을 이용하는 간단한 계산기가 있다. 이 계산기에는 레지스터가 하나 있는데, 이 레지스터에는 0 이상 10,000 미만의 십진수를 저장할 수 있다. 각 명령어는 이 레지스터에www.acmicpc.net문제 간단 설명   제목이 DSLR 이길래 카메라 관련 문제인 줄 알았으나 D, S, L, R 연산을 하는 문제라서 DSLR 이었습니다. 문제는 0~10000 수를 저장할 수 있는 레지스터에 시작 수가 하나 들어있고, 타겟(목표가 될 수) 숫자가 주어집니다. 우리는 이 시작 수를 가지고 D, S, L, R 연산만을 이용해서 타겟 수를 만들면 되는데 최소한의 명령으로 이를 완성해야 합니다. 이 최소한의 명령을 구하는 것이 문제이며, '스페셜 저지' 문제라 ..

[백준] 7569 토마토, java

7569번: 토마토첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100,www.acmicpc.net문제 간단 설명H개의 층에 N x M 사이즈의 상자에 익은토마토, 안익은 토마토, 빈공간이 있습니다. 익은토마토는 하루의 시간동안 인접한 여섯방향 상하좌우앞뒤 방향에 존재하는 안익은 토마토를 익게 만들 수 있습니다. 그렇다면 몇일이 지나야 상자안에 있는 모든 토마토를 익게 만들 수 있는지 구하시오. 모든 토마토를 익게 만들 수 없다면 -1을 반환 하면 됩니다.문제 풀이생각을 하는 것이 크게 어려운 문제는 아니었던 것 같습니다. 일단 가로, 세로..

[백준] 1927 최소 힙, java

1927번: 최소 힙첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0www.acmicpc.net문제 간단 설명이 문제는 제목처럼 최소 힙이라는 자료구조를 사용하는 해결 방법인 문제입니다. 저는 최소 힙의 역할을 해줄 수 있는 우선순위 큐(Priority Queue)를 이용하여 간단하게 풀이 하였습니다.풀이Java에서 제공하는 라이브러리인 Priority Queue를 이용하여 문제에서 주어진 그대로 사용하였습니다.코드package com.baekjoon.silver;import java.io.BufferedReader;import java.i..

[백준] 1764 듣보잡, java

1764번: 듣보잡첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다.www.acmicpc.net문제 간단 설명듣도 못한 사람 명단, 보도 못한 사람의 명단이 주어집니다. 각각의 명단에는 중복된 이름이 존재하지 않으며 두가지 명단에 모두 포함된 사람의 수를 구하고, 해당 사람들의 명단을 사전순으로 출력합니다.풀이입력 조건에 주어진 듣도 못한 사람 명단, 보도 못한 사람 명단의 수가 500,000 이하의 자연수라고 주어졌습니다. 그렇기 때문에 단순히 이중 포문으로 두가지 리스트를 비교하는 방법은 시간 초과가 날 것이 분명했습니다. (500,000*500,000)..

[백준] 3052 나머지, java

www.acmicpc.net/problem/3052 3052번: 나머지39, 40, 41, 42, 43, 44, 82, 83, 84, 85를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 모두 6개가 있다.www.acmicpc.netimport java.util.*;public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); //숫자를 입력받기위한 scanner 객체 생성 int[] numbers = new int[10]; //숫자가 10개라고 주어..