본문 바로가기

algorithm/BOJ

(63)
백준 14500_테트로미노(C++) https://www.acmicpc.net/problem/14500 14500번: 테트로미노 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변끼리 연결되어 있어야 한다. 즉, 꼭짓점과 꼭짓점만 맞닿아 있으면 안 된다. 정사각형 4개를 이어 붙인 폴리오미노는 테트로미노라고 하며, 다음과 같은 5가지가 있다. 아름이는 크기가 N×M인 종이 위에 테트로미노 하나를 놓으려고 한다. 종이는 1×1 크기의 칸으로 나누 www.acmicpc.net [문제 풀이] DFS와 시뮬레이션을 이용하여 문제를 풀었습니다. 이번 문제는 2차원 배열에서 5가지 형태로 이루어진 부분 배열의 최..
백준 11053_가장 긴 증가하는 부분 수열(C++) https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다. www.acmicpc.net [문제 풀이] 다이나믹 프로그래밍을 이용하여 문제를 풀었습니다. 이 문제는 증가하는 부분 수열 중에 가장 긴 부분 수열을 찾는 문제입니다. 부분 수열을 찾기 위해 DP 배열을 선언하여 메모제이션 해주었습니다. 2중 반복문을 돌면서 0번째 인덱스부터 i번째 인덱스까지 반복하면서 자신보다 값이 작은 경우..
백준 14502_연구소(C++) https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크기가 N×M인 직사각형으로 나타낼 수 있으며, 직사각형은 1×1 크기의 정사각형으로 나누어져 있다. 연구소는 빈 칸, 벽으로 이루어져 있으며, 벽은 칸 하나를 가득 차지한다. 일부 칸은 바이러스가 존재하며, 이 바이러스는 상하좌우로 인접한 빈 칸으로 모두 퍼져나갈 수 있다. www.acmicpc.net [문제 풀이] 시뮬레이션을 이용하여 문제를 풀었습니다. 시뮬레이션을 구현하는 과정에서 BFS와 조합이 쓰였습니다. 이 문제의 경우 연구소를..
백준 16236_아기 상어(C++) https://www.acmicpc.net/problem/16236 16236번: 아기 상어 N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가지고 있고, 이 크기는 자연수이다. 가장 처음에 아기 상어의 크기는 2이고, 아기 상어는 1초에 상하좌우로 인접한 한 칸씩 이동한다. 아기 상어는 자신의 크기보다 큰 물고기가 있는 칸은 지나갈 수 없고, 나머지 칸은 모두 지나갈 수 있다. 아기 상어는 자신의 크 www.acmicpc.net [문제 풀이] 시뮬레이션을 이용하여 문제를 풀었습니다. 이 문제는 더 이상 먹을 수 있는 물고기가 공간에 없다면 아기 상어는 엄마 ..
백준 15684_사다리 조작(C++) https://www.acmicpc.net/problem/15684 15684번: 사다리 조작 사다리 게임은 N개의 세로선과 M개의 가로선으로 이루어져 있다. 인접한 세로선 사이에는 가로선을 놓을 수 있는데, 각각의 세로선마다 가로선을 놓을 수 있는 위치의 개수는 H이고, 모든 세로선이 같은 위치를 갖는다. 아래 그림은 N = 5, H = 6 인 경우의 그림이고, 가로선은 없다. 초록선은 세로선을 나타내고, 초록선과 점선이 교차하는 점은 가로선을 놓을 수 있는 점이다. 가로선은 인접한 두 세로선을 연결해야 한다. 단, 두 가로선이 연속하거나 서로 www.acmicpc.net [문제 풀이] 시뮬레이션을 이용하여 문제를 풀었습니다. 이 문제는 시작 지점 사다리 번호와 도착 지점 사다리 번호를 같게 만드는 문..
백준 15686_치킨 배달(C++) https://www.acmicpc.net/problem/15686 15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸, 왼쪽에서부터 c번째 칸을 의미한다. r과 c는 1부터 시작한다. 이 도시에 사는 사람들은 치킨을 매우 좋아한다. 따라서, 사람들은 "치킨 거리"라는 말을 주로 사용한다. 치킨 거리는 집과 가장 가까운 치킨집 사이의 거리이다. 즉, 치킨 거리는 www.acmicpc.net [문제 풀이] 조합을 이용하여 문제를 풀었습니다. 도시의 치킨집 중에 M개를 조합을 이용하여 골라줍니다. M개의 치킨집이 선택되었다면..
백준 14889_스타트와 링크(C++) https://www.acmicpc.net/problem/14889 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net [문제 풀이] 완전탐색을 이용하여 문제를 풀었습니다. 스타트 팀과 링크 팀이 가질 수 있는 맴버의 경우 수를 모두 고려하여 check 배열에 메모제이션을 해줍니다. 그 후 반복문을 통해 스타트 팀과 링크 팀의 점수를 비교하여 가장 작은 수를 찾아 주었습니다. [코드] #include using namespace std; int map[21][21]; int check[21] = { 0, }; int N; int res..
백준 14891_톱니바퀴(C++) https://www.acmicpc.net/problem/14891 14891번: 톱니바퀴 첫째 줄에 1번 톱니바퀴의 상태, 둘째 줄에 2번 톱니바퀴의 상태, 셋째 줄에 3번 톱니바퀴의 상태, 넷째 줄에 4번 톱니바퀴의 상태가 주어진다. 상태는 8개의 정수로 이루어져 있고, 12시방향부터 시계방향 순서대로 주어진다. N극은 0, S극은 1로 나타나있다. 다섯째 줄에는 회전 횟수 K(1 ≤ K ≤ 100)가 주어진다. 다음 K개 줄에는 회전시킨 방법이 순서대로 주어진다. 각 방법은 두 개의 정수로 이루어져 있고, 첫 번째 정수는 회전시킨 톱니바퀴 www.acmicpc.net [문제 풀이] 시뮬레이션을 이용하여 문제를 풀었습니다. 이 문제는 주어진 상황을 순서대로 진행해주는 것이 문제의 핵심입니다. 이 코드..