본문 바로가기

알고리즘/알고리즘 설명61

20230803 [Java] 문제풀이 20230803 [Java] 문제풀이 [프로그래머스] 호텔 대실 정렬과 우선순위큐를 사용하였다 일단 Book이라는 클래스 안에 시작 시간과 끝나는 시간을 넣어 객체를 만들었다 여기서 시작 시간과 끝나는 시간은 시를 60을 곱해서 분으로 만들어서, 나머지 분과 더했다 끝나는 시간 같은 경우 10분을 더해서 청소 시간까지 더했다 일단 시작 시간을 기준으로 정렬을 했다 rooms라는 우선순위큐를 만들었다 이 우선순위큐는 객실 중에서, 제일 먼저 사용이 가능한 객실을 제일 앞으로 올 수 있도록 만들었다 그 뜻은 finish 시간이 제일 적은 Book 객체가 제일 앞으로 오는 것이다 만약에 제일 먼저 끝나는 방의 시간보다 다음 예약 시간이 빠를 경우에는, 다음 예약을 rooms에 넣었다 다음 예약자는 새로운 방을.. 2023. 8. 3.
20230802 [Java] 문제풀이 20230802 [Java] 문제풀이 [프로그래머스] 미로 탈출 start에서 lever로 갈 수 있는 최단 거리 lever에서 exit로 갈 수 있는 최단 거리를 구하는 것이다 즉 bfs를 두번을 해야 하며, 하나라도 -1이 나오면 start에서 lever을 거쳐서 exit로 못 가는 것이다 -1은 길이 없다는 뜻 import java.util.*; class Solution { public static int count = 0; public static int[][] dr = {{-1, 0}, {0, -1}, {0, 1}, {1, 0}}; public static int bfs(String[] maps, int[] start, int[] finish) { Queue queue = new LinkedL.. 2023. 8. 2.
20230801 [Java] 문제풀이 20230801 [Java] 문제풀이 [프로그래머스] 리코쳇 로봇 동, 서, 남, 북 으로만 움직일 수 있고, 한 방향으로 움직이기 시작하면 게임판 내 또는 "D"를 마주할때까지 앞으로 움직인다 그렇게 움직임을 세면서 제일 적은 횟수로 "G"까지 도달할 수 있도록 구현을 하는 문제이다 BFS로 구현을 했다 import java.util.*; class Solution { public int solution(String[] board) { String[][] newBoard = new String[board.length][board[0].length()]; int[][] visited = new int[board.length][board[0].length()]; int[] dr = {-1, 0, 0, 1}.. 2023. 8. 1.
20230731 [Java] 문제풀이 20230731 [Java] 문제풀이 [프로그래머스] 과제 진행하기 하면서 혼자서 디버깅을 계속 하다가, 왜 에러가 뜨는지 찾을 수 있었다 값을 출력하면서 디버깅 계속하는 습관 들이기!!! 일단 시작 시간을 시:분 에서 분으로 만들어 놓는다 그리고 다음 과제를 시작할 때에, 현재 과제를 못 끝내면, 현재 과제를 스택에 넣는다 그리고 만약 다음 과제를 끝내기 전에 현재 과제를 끝냈으면 스택에 넣지 않는다 대신 다음 과제를 시작하기 전에 시간이 남고, 스택에 과제가 있으면, 그 과제를 진행한다 계속 틀렸던 부분은 while문에서 스택에서 과제를 꺼냈는, 다음 과제를 시작하기 전에 못 끝냈을 때 (else부분)에 break를 넣지 않아서 계속 틀렸다 import java.util.*; class Homewor.. 2023. 7. 31.
20230726 [Java] 문제풀이 20230726 [Java] 문제풀이 기초 다지기!!!!! [프로그래머스] 수열과 구간 쿼리 4 import java.util.*; class Solution { public int[] solution(int[] arr, int[][] queries) { int[] answer = new int[arr.length]; for(int num = 0; num < arr.length; num++) answer[num] = arr[num]; for (int[] q : queries) { for (int i = q[0]; i 2023. 7. 26.
20230725 [Java] 문제풀이 20230725 [Java] 문제풀이 기초 다지기!!!!! [프로그래머스] 문자열 겹쳐쓰기 StringBuilder 또는 StringBuffer를 더 많이 사용해봐야겠다! class Solution { public StringBuilder solution(String my_string, String overwrite_string, int s) { StringBuilder answer = new StringBuilder(); answer.append(my_string.substring(0, s)); answer.append(overwrite_string); answer.append(my_string.substring(overwrite_string.length() + s, my_string.length()).. 2023. 7. 25.
20230720 [Java] 문제풀이 20230720 [Java] 문제풀이 [백준] 27433 팩토리얼 20! 은 int를 훨씬 넘어서 int가 아니라 long을 사용해야 한다 import java.util.*; public class baekjoon27433 { public static long factorial(long num) { if (num == 0 || num == 1) { return 1; } return num * factorial(num-1); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); long answer = factorial(scanner.nextLong()); System.out.println(answer); } } 2023. 7. 20.
20230719 [Java] 문제풀이 20230719 [Java] 문제풀이 [백준] 2667 단지번호붙이기 1과 0으로 된 정사각형의 행렬이 주어진다 1은 아파트, 0은 빈공간 아파트는 동서남북으로 연결이 되어 있다 아파트의 수와, 각 아파트의 크기를 구하면 된다 apartNum 에 아파트의 수를 저장했다 그리고 apartments에는 아파트의 크기들을 넣었다 (나중에 sort으로 정렬을 한 후 오름차순으로 출력을 했다) 물론 0은 출력하면 안 됨 import java.util.*; public class baekjoon2667 { static int[][] map; static int[] dr = {-1, 0, 0, 1}; static int[] dc = {0, -1, 1, 0}; static int[] apartments = new in.. 2023. 7. 19.
20230718 [Java] 문제풀이 20230718 [Java] 문제풀이 [백준] 1260 DFS와 BFS 예전에 파이썬으로 풀었던 문제를 자바로 풀어보았다 DFS와 BFS를 구현하는 것이다 여기서 만약에 자식 노드, 즉 다음 정점의 개수가 1개 이상일 경우, 제일 작은 것부터 탐색을 한다 즉 모든 자식 노드들을 오름차순으로 정렬을 해주면 된다 import java.util.*; public class baekjoon1260 { public static void dfs(int[] visited, ArrayList matrix, int start) { System.out.print(start + " "); visited[start] = 1; for (int i = 0; i < matrix.get(start).size(); i++) { if .. 2023. 7. 18.