Algorithm 39

[Algorithm] 최대 수입 스케쥴(PriorityQueue)

설명 N개이 기업에서 강연 요청을 해왔다. 각 기업은 D일 안에 와서 강연을 해 주면 M만큼의 강연료를 주기로 했다. 각 기업이 요청한 D와 M를 바탕으로 가장 많을 돈을 벌 수 있도록 강연 스케쥴을 짜야 한다. 단 강연의 특성상 하루에 하나의 기업에서만 강연을 할 수 있다. 입력 첫 번째 줄에 자연수 N(1 50 2 마지막 1일에 할 수 있는 가장 높은 강의를 구한다. 1~3일중에 구한다. 1~3일중에 강의료가 가장 큰 값을 구한다. (30 3 / 40 2 / 30 1 / 20 1) -> 40 2 이렇게 최대(D)부터 최소(D)까지 각각의 최적의 값을 구한 후 다 더하면 된다. 풀이. class Company implements Comparable{ public int pay; public int da..

Algorithm 2021.07.21

[Algorithm] 회의실 배정(Greedy, 그리디)

설명 한 개의 회의실이 있는데 이를 사용하고자 하는 n개의 회의들에 대하여 회의실 사용표를 만들려고 한다. 각 회의에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 최대수의 회의를 찾아라. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 입력 첫째 줄에 회의의 수 n(1

Algorithm 2021.07.20

[Algorithm] 미로의 최단거리 통로(BFS)

설명 7*7 격자판 미로를 탈출하는 최단경로의 길이를 출력하는 프로그램을 작성하세요. 경로의 길이는 출발점에서 도착점까지 가는데 이동한 횟수를 의미한다. 출발점은 격자의 (1, 1) 좌표이고, 탈출 도착점은 (7, 7)좌표이다. 격자판의 1은 벽이고, 0은 도로이다. 격자판의 움직임은 상하좌우로만 움직인다. 미로가 다음과 같다면 위와 같은 경로가 최단 경로의 길이는 12이다. 입력 첫 번째 줄부터 7*7 격자의 정보가 주어집니다. 출력 첫 번째 줄에 최단으로 움직인 칸의 수를 출력한다. 도착할 수 없으면 -1를 출력한다. 풀이 과정. 좌표(1,1)부터 시작해서 상하좌우 0을 확인 후 Queue에 담으면서 진행. 위 그림좌표와 같은 크기의 2차원 확인배열 하나 만든다. 기존배열은 1칸 씩 이동할 때 마다 ..

Algorithm 2021.07.19

[Algorithm] 토마토(BFS활용)

설명 토마토는 아래의 그림과 같이 격자 모양 상자의 칸에 하나씩 넣어서 창고에 보관한다. 창고에 보관되는 토마토들 중에는 잘 익은 것도 있지만, 아직 익지 않은 토마토들도 있을 수 있다. 보관 후 하루가 지나면, 익은 토마토들의 인접한 곳에 있는 익지 않은 토마토들은 익은 토마토의 영향을 받아 익게 된다. 하나의 토마토의 인접한 곳은 왼쪽, 오른쪽, 앞, 뒤 네 방향에 있는 토마토를 의미한다. 대각선 방향에 있는 토마토들에게는 영향을 주지 못한다. 토마토를 창고에 보관하는 격자모양의 상자들의 크기와 익은 토마토들과 익지 않은 토마토들의 정보가 주어졌을 때, 며칠이 지나면 토마토들이 모두 익는지, 그 최소 일수를 구하는 프로그램을 작성하라. 단, 상자의 일부 칸에는 토마토가 들어있지 않을 수도 있다. 입력..

Algorithm 2021.07.17

[Algorithm] 수열 추측하기(이항계수, DFS, 메모이제이션)

설명 가장 윗줄에 1부터 N까지의 숫자가 한 개씩 적혀 있다. 그리고 둘째 줄부터 차례대로 파스칼 의 삼각형처럼 위의 두개를 더한 값이 저장되게 된다. 예를 들어 N이 4 이고 가장 윗 줄에 3 1 2 4 가 있다고 했을 때, 다음과 같은 삼각형이 그려진다. N과 가장 밑에 있는 숫자가 주어져 있을 때 가장 윗줄에 있는 숫자를 구하는 프로그램을 작성하 시오. 단, 답이 여러가지가 나오는 경우에는 사전순으로 가장 앞에 오는 것을 출력하여야 한다. 입력 첫째 줄에 두개의 정수 N(1≤N≤10)과 F가 주어진다. N은 가장 윗줄에 있는 숫자의 개수를 의 미하며 F는 가장 밑에 줄에 있는 수로 1,000,000 이하이다. 출력 첫째 줄에 삼각형에서 가장 위에 들어갈 N개의 숫자를 빈 칸을 사이에 두고 출력한다...

Algorithm 2021.07.15

[Algorithm] 순열 구하기, 중복순열 구하기(DFS)

순열이란 서로다른 n개 원소중 r개를 선택하여 일렬로 나열하는 경우의 수를 말한다. 예를들어 A/B/C/D 4개 중 3개의 원소를 뽑았다면 선택된 원소는 ABC ACD ABD BCD 4가지가 된다. 이렇게 위치와 순서 상관없이 단순하게 뽑아낸 것을 조합이라고 하는데 여기서 원소들의 순서와 위치를 다르게 하여 일렬로 나열 하는 것을 순열이라고 한다. 즉 순열은 위치와 순서가 있는 조합이다. 위의 4가지 조합 중에 하나인 ABC를 위치와 순서에 따라 나열하는 경우 ABC ACB BAC BCA CAB CBA - 6가지의 경우의 수가 생긴다. 즉 ABC의 경우의 수 6 ACD 의 경우의 수 6 BCD 의 경우의 수 6 ABD의 경우의 수 6 이렇게 해서 A/B/C/D 4개 중 3개의 원소를 뽑는 순열의 경우의 ..

Algorithm 2021.07.14

[Algorithm] 최대점수 구하기(DFS)

설명 정보올림피아드대회에서 N개의 문제를 풀려고 합니다. 각 문제는 그것을 풀었을 때 얻는 점수와 푸는데 걸리는 시간이 주어지게 됩니다. 제한시간 M안에 N개의 문제 중 최대점수를 얻을 수 있도록 해야 합니다. (해당문제는 해당시간이 걸리면 푸는 걸로 간주한다, 한 유형당 한개만 풀 수 있습니다.) 입력 첫 번째 줄에 문제의 개수N(1

Algorithm 2021.07.13