목록Algorithm (25)
소소한 개발이야기
📄 저울 [백준 2437번] 🔗 [전체 소스 코드] 🔗 [문제 풀러 가기] 문제 풀이 문제는 그리디 알고리즘으로 해결하였습니다. N개의 저울추가 주어질 때 측정할 수 없는 최소값을 찾는 문제입니다. 최소값을 찾는 문제이므로 가장 무게가 적은 저울추부터 올려가며 잴 수 없는 무게를 찾아내면 문제를 해결할 수 있습니다. 먼저 문제 조건부터 살펴보겠습니다. 문제 조건 무게가 양의 정수인 N개의 저울추가 주어진다. 저울추의 무게는 중복될 수 있다. 주어진 저울추들로 측정할 수 없는 최소값을 구하여라. 문제 접근 위에서 설명했던 것처럼 잴 수 없는 최소값을 구하는 문제이므로 1부터 무게를 올려가며 잴 수 없는 최소값을 구하면 문제를 해결할 수 있습니다. 먼저 저울추를 적은 무게부터 오름차순으로 정렬한 뒤 하나씩 ..
📄 슈퍼 마리오 [백준 2851번] 🔗 [전체 소스 코드] 🔗 [문제 풀러 가기] 문제 풀이 문제는 단순 비교를 통해 해결하였습니다. 총 10개의 버섯을 차례대로 먹을 때 현재까지 먹은 버섯 점수와 다음 버섯을 먹었을 때 점수를 비교해서 100에 가까운 값을 찾는 방법입니다. 먼저 문제의 조건을 살펴보겠습니다. 문제 조건 10개의 버섯이 일렬로 놓아져 있다. 버섯을 처음부터 나온 순서대로 먹는다. 모든 버섯을 먹을 필요는 없고 중간에 중단할 수 있다. 중간에 먹는것을 중단하면 이 후에 나온 버섯은 모두 먹을 수 없다. 먹은 버섯의 합을 최대한 100에 가깝게 만들어라. 문제 접근 문제 접근 방법은 지금까지 먹은 버섯의 합과 다음 버섯을 먹었을 때의 합을 비교해 100과 가까운지 체크하면 쉽게 해결할 수 ..
📄 방 배정 [백준 13300번] 🔗 [전체 소스 코드] 🔗 [문제 풀러 가기] 문제 풀이 문제는 2차원 배열을 이용해 해결하였습니다. 성별이 0, 1로 주어지는 점과 총 학년은 6학년 밖에 되지 않기 때문에 2차원 배열로 쉽게 해결할 수 있습니다. 먼저 문제의 조건을 살펴보겠습니다. 문제 조건 1학년부터 6학년 까지 학생들이 묵을 방을 배정한다. 남학생은 남학생끼리, 여학생은 여학생끼리 방을 배정한다. 한 방에는 같은 학년의 학생들만 배정해야 한다. 한 방에 수용할 수 있는 최대 인원수 K가 주어지며 한 방에 한 명만 배정하는 것도 가능하다. 모든 학생을 배정하기 위해 필요한 방의 최소 개수를 구하여라. 문제 접근 먼저 성별이 0, 1로 주어지기 때문에 2차원 배열을 만들어 0번째 행은 여학생, 1번째..
📄 영화감독 숌 [백준 1436번] 🔗 [전체 소스 코드] 🔗 [문제 풀러 가기] 문제 풀이 문제는 String 클래스의 contains를 이용해 해결하였습니다. 먼저 문제의 조건을 살펴보겠습니다. 문제 조건 종말의 숫자란 어떤 수에 6이 적어도 3개이상 연속으로 들어가는 수를 말한다. 첫 번째 종말의 숫자는 666이다. N번째 종말의 숫자를 구하여라. 문제 접근 처음 문제를 보았을 때 수가 나타내는 규칙을 찾아보자 라고 생각하였습니다. 하지만 마땅한 규칙이 나타나지 않아서 패스. 두 번째 생각은 6이 들어가는 숫자를 카운팅해서 6이 3개 이상 들어가는지 확인하는 방법이었습니다. 하지만 연속으로 나타나는지에 대한 검사를 해야하기 때문에 패스. (귀찮아서..) 결국 String 클래스에 구현되어 있는 co..
📄 홀수 [백준 2576번] 🔗 [전체 소스 코드] 🔗 [문제 풀러 가기] 매우 간단한 문제입니다. 반복문과 비교연산으로 문제를 해결할 수 있습니다. 먼저 문제의 조건을 살펴보겠습니다. 문제 조건 총 7개의 자연수가 주어진다. 주어진 자연수 중 홀수의 합을 구한다. 홀수 중 가장 작은 값을 구한다. 만약 홀수가 없다면 -1을 출력한다. 문제 접근 주어지는 자연수가 홀수라면 합을 저장하는 변수에 저장함과 동시에 가장 작은 값인지 확인하면 문제를 해결할 수 있습니다. 글보단 코드를 보면 더 이해하기 쉽습니다. 🌱 main 함수 // 전역변수 private static final int MAX_SIZE = 7; public static void main(String[] args) throws IOExcepti..
📄 배열 합치기 [백준 11728번] 🔗 [전체 소스 코드] 🔗 [문제 풀러 가기] 문제는 정렬을 이용해 해결하였습니다. 문제가 쉬운 관계로 간단하게 설명 드리겠습니다. 먼저 문제의 조건을 보면 주어지는 두 배열을 합친 뒤 정렬하여 출력하라. 입니다. 즉, 주어지는 두 배열을 합친 길이 만큼의 새로운 배열을 생성 한 뒤 두 배열의 값을 모두 넣습니다. 이 후 Arrays.sort()를 이용해 정렬 한 뒤 출력하면 문제를 해결할 수 있습니다. 글보단 코드를 보면 더 이해하기 쉽습니다. 🌱 main 함수 public static void main(String[] args) throws IOException { String[] input = br.readLine().split(" "); int sizeA = ..
📄 소음 [백준 2935번] 🔗 [전체 소스 코드] 🔗 [문제 풀러 가기] 문제 풀이 문제는 문자열 처리를 통해 해결하였습니다. 주어지는 수의 최대 자리수가 100자리수 이기 때문에 BigInteger를 통해 해결 할 수도 있지만 문자열이 더 쉽게 접근 할 수 있을 거 같아 문자열로 해결하였습니다. 먼저 문제의 조건을 살펴보겠습니다. 문제 조건 두 수는 무조건 10의 제곱꼴로 주어진다. 연산자는 ' + '와 ' * ' 두 개뿐이다. 수는 최대 100자리까지 주어진다. 문제의 조건에서 수는 최대 100자리까지 주어진다. 라는 말이 있으므로 int, long 형으로는 숫자를 처리할 수 없습니다. 그렇다면 두 가지 방법이 있는데 BigInteger를 이용하는 것과 문자열을 이용하는 것 입니다. 이번 풀이는 문..
📄 Mini Fantasy War [백준 12790번] 🔗 [전체 소스 코드] 🔗 [문제 풀러 가기] 단순 구현 문제 입니다. 주어지는 조건과 입력을 이해하고 처리할 수 있으면 쉽게 해결 할 수 있습니다. 문제에서 단, HP와 MP는 1보다 작은 경우 1로 간주하며, 공격력은 0보다 작은 경우 0으로 간주한다. 방어력은 음수 여부에 상관하지 않는다. 이 부분을 따로 처리하여 계산하면 쉽게 해결 할 수 있습니다. 저는 hp, mp를 계산하는 함수, attack을 계산하는 함수, guard를 계산하는 함수를 만들어 base 값들을 설정한 뒤 문제에서 제시하는 전투력 = 1 * (HP) + 5 * (MP) + 2 * (공격력) + 2 * (방어력) 에 대입하여 문제를 해결하였습니다. 글보단 코드를 보면 더 이..