목록Algorithm/백준 (21)
Inor
- 문제 : https://www.acmicpc.net/problem/1932 피라미드 모양으로 구성된 숫자들을 특정 기준에 맞게 더할 경우에 나올 수 있는 최대값을 구하는 문제입니다. 숫자는 아래 방향으로 인접한 두 수를 더할 수 있습니다. 문제에대한 정확한 설명을 링크를 참조해주세요. - 풀이 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 위 모양으로 구성된 피라미드의 경우에 7은 3과 8을 더할 수 있습니다. 7이 3과 8을 더해서 나온 값들인 10과 15의 경우에 10은 8과 1을 더할 수 있고 15는 1과 0을 더할 수 있습니다. 이렇게 더해가는 과정을 반복하면 마지막에 이르게 되는데 그때 최대값을 찾아주면 됩니다. 처음에는 무조건 위에서 아래로 더해주는 경우를 생각했고 2개의 부모와 더..
- 문제 : https://www.acmicpc.net/problem/14890 지도(2차원 행렬)에 지형의 높이가 나와있고 높이가 다른 지형을 경사로를 설치해서 연결하는 문제입니다. 경사로의 높이는 1이고 높이 차이가 1이 나는 지형에만 경사로를 설치할 수 있습니다. 경사로의 길이는 매번 다르며 경사로 설치를 위해 따라야하는 몇 가지 제약 조건이 있습니다. - 풀이 문제의 제약 사항을 분기하고 프로그램을 구현할 수 있는지 확인하는 문제입니다. 문제의 출처에 가보면 4가지 제약 사항이 나오는데, 그 중에서 경사로를 설치한 위치에 다시 경사로를 설치할 수 없다는 제약을 만족 시키기 위해서 boolean 타입의 isSlope[][]을 선언해서 해당 위치에 이미 경사로가 설치된 상태인지 확인했습니다. 그리고 ..
- 문제 : https://www.acmicpc.net/problem/14889 N명(짝수)의 사람들이 팀을 이루는 경우의 수를 모두 구하는 문제입니다. 모든 사람들은 특정 사람과 팀을 이루었을때 시너지 효과(능력치)가 높아지고 낮아집니다. 공평한 경기를 위해 팀을 구성 했을때, 2팀의 시너지 효과 차이가 가장 적은 경우를 찾는 문제입니다. 경우의 수를 구해서 해당 경우에 두 팀의 시너지 효과를 구하면 됩니다. - 풀이 모든 경우의 수를 탐색하기 위해서 깊이 탐색 알고리즘을 사용했습니다. 재귀를 이용해서 깊이 탐색을 했는데 N이 30이 넘어가면 연산이 안되는 경우가 발생했습니다. 이 부분은 추후에 스택으로 바꿔서 결과가 차이 나는지 확인해보겠습니다. 그리고 조합을 구현하기 위해서 중복을 피하는 방법을 사..
- 문제 : https://www.acmicpc.net/problem/9324 비밀 코드가 정확한 코드인지 잘못된 코드인지 해석하는 문제입니다. 어떤 알파벳이 이전에 3번 출현 했으면 해당 알파벳을 한번 더 써줘서 비밀 코드를 만듭니다. 예를 들어서, ABBSABB라는 코드가 있다면 B가 3번 출현했고 마지막에 B를 추가로 적어서 비밀 코드를 만들었습니다. 그리고 이 코드는 참입니다. 만약, ABBSAB 코드가 주어졌다면 이는 거짓입니다. B가 3번 나왔지만 마지막에 B를 써주지 않았습니다. 또한, ABBSABA 코드가 주어졌다면 이는 거짓 코드입니다. B가 3번 출현했지만 마지막 B 다음에 A가 출현했습니다. - 풀이 이전까지 알파벳이 얼마나 출현했는지 보여주는 배열(numOfAfter)을 선언해서 암..
- 문제 : https://www.acmicpc.net/problem/2851 10개의 버섯이 차례대로 주어지고 슈퍼마리오가 버섯을 순서대로 먹으며 점수를 높이는 상황을 구현하는 문제입니다. 점수가 최대한 100에 가까울 경우에 버섯 먹는 과정을 그만두고 그 점수를 출력합니다. 만약에 98과 102가 나오는 상황에서는 102를 출력하면 됩니다. - 해결 먼저 버섯을 순서대로 먹도록 구현했고 버섯을 먹으며 다음 단계에 먹을 버섯의 값과 비교해서 어떤 값이 100에 가장 가까운지 확인했습니다. 그리고 만약 102와 98이라는 값이 나오면 100과의 차이가 2 일 경우에 102에 우선순위를 두도록 했습니다. now와 after변수를 이용해서 현재 점수와 다음 버섯을 먹었을때의 점수를 비교했습니다. - 소스 코..
- 문제 : https://www.acmicpc.net/problem/10250 문제가 길지만 간단한 문제입니다. 사람의 번호를 층수로 나누었고 엘리베이터에서 얼만큼 떨어져있는지를 계산했습니다. 그리고 나머지 연산으로 사람 번호를 층으로 계산했습니다. 몇 층에 있는지 계산하기 위함이었고 0이 나오면 가장 위의 층에 있는 경우이므로 따로 분기해서 계산 했습니다. - 소스 코드 import java.util.Scanner; public class ACMHotel { int tNum; int[][] testCases; int[] results; public void solve() { Scanner sc = new Scanner(System.in); String tString; tNum = sc.nextInt(..