Computer Sciences(236)
-
[Baekjoon] 10026번: 적록색약 - Java
https://www.acmicpc.net/problem/10026 10026번: 적록색약 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록) www.acmicpc.net 문제 설명 기본적인 DFS 문제이다. RGB 픽셀로 이루어진 입력이 주어지고 일반 사람과 적록색약이 볼 수 있는 구역의 수를 구하면 된다. 풀이 방법 일반인과 적록색약이 보는 그림을 구분하기 위해 먼저 두 개의 배열을 준비하고 입력받았다. 적록색약의 그림은 G를 R로 대신 입력하면 된다(또는 그 반대). for (int x = 0; x < N; x++) { char[] pixels = br..
2023.02.13 -
[Baekjoon] 14888번: 연산자 끼워넣기 - Java
https://www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net 문제 설명 수열과 연산자들이 주어지고 그 모든 조합을 찾아 최댓값과 최솟값을 구하는 문제이다. 모든 경우를 탐색해야 하므로 완전탐색 문제이다. 풀이 방법 이 문제는 재귀를 활용하여 해결할 수 있다. 해결 방법이 DFS와 같은 방식이다. 종료 조건은 인덱스와 N의 값이 같을 때인데 N과 같다면 더 이상 할 연산이 없기 때문이다. 그리고 반복이 ..
2023.02.11 -
[Baekjoon] 3190번: 뱀 - Java
https://www.acmicpc.net/problem/3190 3190번: 뱀 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임 www.acmicpc.net 문제 설명 문제 이해 자체는 어렵지 않으나 구현 및 시뮬레이션 문제라 시간이 걸린다. 그리고 방향 전환 알고리즘에 대한 감이 없다면 처음에는 조금 시간이 걸릴 수 있다. 또한 뱀의 길이 및 방향 전환 관리를 위해 덱, 큐 자료구조를 사용했다. 풀이 방법 구현 문제라 딱히 설명할 것은 없다. 전체 코드는 다음과 같다. package baekjoon.queue; import java.io.BufferedRe..
2023.02.10 -
[Baekjoon] 2493번: 탑 - Java
https://www.acmicpc.net/problem/2493 2493번: 탑 첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1 www.acmicpc.net 문제 설명 문제가 조금 장황한 것 같지만 핵심은 간단하다. 주어진 탑들이 마지막부터 반대 방향으로 레이저를 발사하는데 자신보다 높은 탑만 신호를 받을 수 있다. 즉, 마지막부터 자신보다 높은 가장 가까운 탑을 찾아내면 되는 것이다. 사이트 예제를 그림으로 설명하면 다음과 같다. 이는 스택을 활용하면 효율적으로 해결할 수 있다. 오등큰수와 비슷한 문제이다. 풀이 방법 핵심 로직은 다음과 같다. 중..
2023.02.09 -
[Baekjoon] 17299번: 오등큰수 - Java
https://www.acmicpc.net/problem/17299 17299번: 오등큰수 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다. www.acmicpc.net 문제 설명 오른쪽에 있는 숫자 중 자신보다 수열에서 많이 등장한 가장 가까운 수를 찾으면 된다. 문제 자체는 이해하면 어렵지 않지만 구현에서 고생했다. 풀이 방법 1. 이중 반복문(시간 초과) 처음에는 반복문을 통해 순회하면서 해결하려고 했다. 하지만 시간 초과가 발생했다. for (int i = 0; i < N; i++) { int curElem = elems[i]; boolean isAppearence =..
2023.02.08 -
[Baekjoon] 11723번: 집합 - Java
https://www.acmicpc.net/problem/11723 11723번: 집합 첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다. www.acmicpc.net 문제 설명 집합 개념에 대한 간단한 문제이다. 다만 주의할 것은 시간과 메모리 제한이 있으므로 배열 또는 비트 연산자로 문제를 해결해야 한다. 풀이 방법 1. 배열 먼저 배열로 푸는 방법이 있다. 배열에 담기는 숫자가 20까지로 제한되어 있으므로 짧은 배열로 해결이 가능하다. 배열의 타입으로는 boolean과 int 타입을 둘 다 사용할 수 있지만 크기가 작은 boolean을 사용하면 된다. 코드 package baekjoon.im..
2022.05.18