목록BOJ (40)
소소한 개발이야기
📄 키로거 [백준 5397번] 🔗 [전체 소스 코드] 🔗 [문제 풀러가기] 문제는 스택(Stack) 또는 링크드리스트(LinkedList)를 활용하여 문제를 해결할 수 있습니다. 해당 풀이는 스택(Stack)을 활용하여 문제를 풀어보겠습니다. 먼저 문제의 조건을 살펴보고 어떻게 문제에 접근해야 하는지 살펴보겠습니다. 문제 조건 문제에서 제시하는 키로거는 사용자가 입력하는 문자, 좌우 방향키, 백스페이스키로 구분되어 있습니다. 일반 에디터에서 글을 작성할 때와 동일하게 생각하시면 됩니다. 글을 입력하는 곳을 나타내는 커서는 방향키로 이동할 수 있으며 해당 커서에 글을 입력하게 됩니다. 만약, 글을 작성하다 중간에 어떤 글자 또는 문구를 삽입하고 싶을 떄 방향키로 해당 위치로 이동해 중간에 글을 작성하는걸 ..
📄 저울 [백준 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를 이용하는 것과 문자열을 이용하는 것 입니다. 이번 풀이는 문..