목록Algorithm (25)
소소한 개발이야기
📄 프린터 🔗 문제 풀러가기 Queue를 이용해 문제를 풀 수 있습니다. 문제는 다음과 같이 접근할 수 있습니다. 먼저 인쇄 대기목록의 index와 해당 인쇄물의 priority를 저장하는 PrintItem Class를 정의해줍니다. 🌱 PrintItem Class class PrintItem { int index; int priority; public PrintItem(int index, int priority) { this.index = index; this.priority = priority; } } 그리고 주어진 인쇄 대기목록을 모두 Queue에 넣습니다. 이 후 Queue의 가장 첫 번째 원소를 대기상태로 뺀 다음 Queue에 남은 인쇄 목록 중 대기상태의 priority값 보다 큰 원소들의 개..
📄 방문 길이 🔗 문제 풀러가기 단순 구현문제 입니다. 문제의 조건은 총 2가지로 주어져 있습니다. 첫 번째로, 주어진 좌표 평면 안에서만 움직여야 하고 두 번째로, 한 번 갔던 길은 카운팅 하지 않는다 입니다. 문제 풀이 접근 방식은 다음과 같이 할 수 있습니다. 먼저, 맵에서 캐릭터가 움직인 경로를 체크하는 4차원 배열을 생성합니다. 4차원이라 조금 헷갈릴 수도 있지만 동작 방식은 다음과 같이 설정할 수 있습니다. 예를 들어, 현재의 위치를 curX, curY라 하고 움직인 위치를 dx, dy라 한다면 캐릭터가 움직인 경로는 [curx][curY][dx][dy] 입니다. 만약 움직이는 경로가 처음 가는 길이라면 카운팅을 해주면 됩니다. 여기서 주의해야 할 점은 캐릭터가 움직인 경로를 체크할 때 양 방..
📄 스킬트리 🔗 문제 풀러가기 문제에서 주어진 조건은 생각보다 단순합니다. 먼저 모든 문자열은 알파벳 대문자로만 이루어져 있습니다. 그리고 스킬의 총 길이는 최대 26이며 중복 또한 없습니다. 완전 탐색으로 진행해도 쉽게 문제를 해결할 수 있는 유형입니다. 문제 풀이 접근 방식은 다음과 같이 할 수 있습니다. 스킬트리 안에 스킬 순서에 포함되는 스킬이 있을 시 선행 스킬을 배웠는지 확인합니다. 여기서 문제를 조금 단순화 시킬 수 있는데 현재 스킬을 배우기 위해 이전의 모든 선행 스킬을 다 확인 할 필요가 없습니다. 바로 이전의 선행 스킬만 확인하면 됩니다. 만약 이전의 선행 스킬을 배우지 않았다면 이미 이루어 질 수 없는 조합이기 때문입니다. 여기서 주의해야 할 점은 스킬의 index가 0번째라면 out..
💡 [BOJ #1463번] (1로 만들기) 문제 풀이 🔗 [소스 코드] 다이나믹 프로그래밍의 기본적인 문제라고 말합니다. 하지만 다이나믹 프로그래밍을 접해보지 않은 사람들에게는 너무 어렵게 느껴집니다. 문제를 어떻게 접근하는지에 대해 살펴봅시다. 다이나믹 프로그래밍은 점화식을 세우는 것에서 부터 시작합니다. 그리고 문제를 푸는 방식은 두 가지가 존재하는데 재귀 호출을 이용하는 방법과 반복문을 이용하는 방법이 있습니다. 전자의 경우 Top-Down방식이라고 하며 가장 먼저 호출하는 문제가 가장 큰 문제이기 때문이며, 후자의 경우 Bottom-Up 방식이라고 하며 가장 작은 문제부터 차례대로 답을 쌓아 올려가기 때문입니다. 두 접근법 모두 이미 구해진 문제를 재활용 한다는 개념이 내포되어 있습니다. 🌱 To..
[백준 온라인 저지] #2884번 (알람 시계) 문제풀이 45분 전으로 시간을 맞춰야하는 문제. 45분 전으로 되돌렸을 때 `minute`가 음수인지 아닌지만 확인한다면 쉽게 해결 할 수 있는 문제이다. 여기서 주의해야 할 점은 `hour`가 음수가 되는 경우만 확인해서 전 날인 `23시`로 바꿔주기만 하면 쉽게 해결할 수 있다. 소스코드 12345678if (minute - 45
[백준 온라인 저지] #11718번 (그대로 출력하기) 문제풀이 입력 횟수가 주어지지 않으므로 그 부분만 주의해서 문제를 풀면 쉬운 출력문제이다.총 2가지의 입력 방법에 대한 풀이가 있다. 첫 번째, Scanner를 이용한다면 Scanner의 hasNext() 함수를 이용하여 다음 입력값이 있는지 확인하고 출력해주면 된다. 12345Scanner in = new Scanner(System.in); while (in.hasNext()) { System.out.println(in.nextLine());}Colored by Color Scriptercs 두 번째, BufferedReader를 이용한다면 null인지 확인만 해주면 된다. 1234567BufferedReader br = new BufferedRe..
[백준 온라인 저지] #2490번 (윷놀이) 문제풀이 윷의 앞면과 뒷면을 1과 0으로 표현을 한다. 가장 평범하게 접근할 수 있는 방법은 `입력된 윷의 합`을 구하는 것이다. 윷의 순서는 상관 없으므로 총 합을 기준으로 `도, 개, 걸, 윷, 모`를 확인하면 쉽게 풀 수 있다. 12345678910char[] result = {'윷', '걸', '개', '도', '모'}; String[] input = br.readLine().split(" ");int sum = 0; for (int index = 0; index
[백준 온라인 저지] #10989번 (수 정렬하기 ) 문제풀이 문제만 보면 너무 쉽게 풀 수 있는 정렬문제이다. 하지만 여기서도 함정이 존재하게 되는데 그 함정에 대해서 한 번 살펴보자. 보기에는 쉬운 문제지만 입출력에 대해서 생각하지 않으면 풀 수 없는 문제이다. 일반적으로 접근하는 방법은 Scanner를 이용해서 입력을 받을 뒤 System.out.print()를 이용해 출력하는 방법이다. 하지만 이렇게 접근하는 순간 시간초과라는 메세지를 얻게 될 것이다. (나는 분명 맞게 풀었는데??) 처음에는 입력된 모든 수를 int[] arr에 저장 한 뒤 Arrays.sort()를 이용해서 정렬한 뒤 배열을 출력하는 형태로 접근했다. 하지만 시간초과에 걸린 것을 보고 주어지는 수가 10000보다 작거나 같다는..