본문 바로가기

전체 글

(44)
[Java] BOJ2470_두 용액 www.acmicpc.net/problem/2470 2470번: 두 용액 첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,00 www.acmicpc.net 용액 문제에서 정렬이 되지 않은 값이 들어온다는 점만 다르다. 따라서 정렬 코드를 추가해주면 된다. import java.io.*; import java.util.Arrays; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws NumberFormatE..
[Java] BOJ2467_용액 www.acmicpc.net/problem/2467 2467번: 용액 첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 오름차순으로 입력되며, 이 수들은 모두 - www.acmicpc.net jihunworld.tistory.com/28 위의 용액 합성하기 문제와 거의 같은 문제이다. 가장 0과 가까운 수를 찾았을 때 왼쪽과 오른쪽 용액을 저장해 두고 출력하면 된다. import java.io.*; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws NumberForm..
[Java] BOJ14921_용액 합성하기 www.acmicpc.net/problem/14921 14921번: 용액 합성하기 홍익대 화학연구소는 다양한 용액을 보유하고 있다. 각 용액은 -100,000,000부터 100,000,000사이의 특성 값을 갖는데, 같은 양의 두 용액을 혼합하면, 그 특성값은 두 용액의 특성값의 합이 된다. 당 www.acmicpc.net 두 용액을 섞어서 0과 가장 가까운 수를 만드는 문제이다. 두 용액을 선택하기 위해 두 포인터 알고리즘을 사용했다. 포인터를 양 쪽 끝으로 잡고 두 용액의 합이 음수일 경우 왼쪽 포인터를 증가시켰고 양수일 경우 오른쪽 포인터를 감소시켰다. 값들이 오름차순으로 정렬되어있기 때문에 두 용액을 섞었을 때 0과 가까운 수를 만들기 위함이다. 왼쪽 포인터를 증가시키면 두 용액의 합은 커지고 오..
[Java] BOJ14890_경사로 www.acmicpc.net/problem/14890 14890번: 경사로 첫째 줄에 N (2 ≤ N ≤ 100)과 L (1 ≤ L ≤ N)이 주어진다. 둘째 줄부터 N개의 줄에 지도가 주어진다. 각 칸의 높이는 10보다 작거나 같은 자연수이다. www.acmicpc.net 행과 열을 구분하여 경사로를 놓아 지나갈 수 있는 길의 수를 셌다. 반복문을 진행하면서 평평한 부분의 길이를 세어주고 높이가 1 차이나는 오르막이 나올 경우 평평했던 부분이 놓을 수 있는 경사로보다 길다면 지나갈 수 있다고 판단해준다. 높이가 1 차이나는 내리막이 나올 경우 내리막이 나온 지점부터 평평한 부분의 길이를 세어주어 경사로를 놓을 수 있는지 판단한다. import java.io.*; import java.util.Strin..
[Java] BOJ14888_연산자 끼워넣기 www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net 연산자를 순서에 상관있게 숫자 사이에 끼워 넣고 식을 계산하여 최댓값과 최솟값을 구하는 문제이다. '-', '/' 연산 등이 존재하여 가지치기를 할 수 없는 문제이다. 연산자를 순서에 맞도록 쉽게 사용하기 위해 oper배열을 만들어주고 연산자 수만큼 순서대로 담아주었다. +는 0, -는 1, *는 2, /는 3이라 할 때 예제 3같은 경우 oper배열에 [..
[Java] BOJ1475_방 번호 www.acmicpc.net/problem/1475 1475번: 방 번호 첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수 또는 0이다. www.acmicpc.net 구현 문제이다. "(6은 9를 뒤집어서 이용할 수 있고, 9는 6을 뒤집어서 이용할 수 있다.)"의 조건에 의해 6과 9를 같은 숫자로 생각할 수 있다. 배열 arr은 해당 인덱스의 숫자를 사용하기 위한 세트의 수를 담고 있다. 6과 9를 제외한 다른 수는 하나의 수를 표현하기 위해 하나의 세트가 필요하다. 6과 9는 같은 숫자로 생각하기로 했으므로 9가 나올 경우 index 6에 담아준다. 6은 2개를 하나의 세트로 표현할 수 있으므로 최종적으로 값을 2로 나눠준다. 배열을 정렬하여 가장 많은 세트..
[Java] BOJ14503_로봇 청소기 www.acmicpc.net/problem/14503 14503번: 로봇 청소기 로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어 www.acmicpc.net 문제에 주어진 조건대로 구현하는 시뮬레이션 문제이다. d라는 방향 값을 가지고 왼쪽 방향이 벽(값이 1)이거나 청소(값이 2)를 이미 했다면 방향을 회전시켜주고 방향을 몇 번 회전시켜주는지 나타내 주는 cnt를 증가시킨다. cnt가 4가 될 경우 네방향 모두 벽이거나 청소를 했다는 것이기 때문에 후진을 할 수 있는지 판단한다. 후진 방향이 벽이면 반복문을 빠져나오고 그렇지 않은 경우 cnt를 0으로 초기화해주..
[Java] BOJ14502_연구소 www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 특별한 알고리즘으로 벽을 최적의 위치에 놓을 방법이 없기 때문에 브루트 포스로 벽을 다 세워봐야 한다. 지도의 최대 크기가 64이고 벽은 3개밖에 세우지 않으므로 충분히 시간 안에 가능하다. 값이 0인(빈 칸)곳의 위치를 리스트에 담아두고 조합을 이용하여 3개씩 뽑아냈다. 해당 위치에 벽을 세운 임시 배열을 만들고 값이 2인(바이러스) 위치에서 BFS를 통해 바이러스를 퍼뜨렸다. 바이러스를 다 퍼뜨리고 0의 갯수를 세서 최..