PS 22

자바(Java) 알고리즘 문제 풀이 - 결혼식

문제 이해 - 결혼식장에 동시에 존재하는 최대 인원수를 구하라 해결 전략 - ArrayList에 시간과 관련된 정보를 저장합니다 -> 해당 ArrayList를 정렬합니다. - ArrayList를 순회하면서 s와 관련된 정보일 때는 인원을 추가하고, e와 관련된 정보일 때는 인원을 감소시킵니다. 구현 import java.util.*; class Time implements Comparable{ public int time; public char state; Time(int time, char state) { this.time = time; this.state = state; } @Override public int compareTo(Time ob){ if(this.time==ob.time) return ..

PS 2022.04.24

자바(Java) 알고리즘 문제 풀이 - 씨름선수

문제 이해 - 특정 선수에 비해 키와 몸무게가 둘 다 높은 선수가 존재하면 해당 선수는 탈락시킨다. 해결 전략 - 키를 기준으로 내림차순 정렬합니다. - 몸무게의 최대값을 max로 설정하고, 몸무게가 max로 업데이트될 때마다 한 명씩 추가합니다. -> 몸무게가 최대값으로 업데이트된다는 것은 해당 선수가 키는 더 작더라도, 몸무게는 더 많이 나간다는 것을 의미하기 때문입니다. 구현 import java.util.*; class Body implements Comparable{ int h; int w; public Body(int h, int w){ this.h = h; this.w = w; } @Override public int compareTo(Body obj){ return obj.h-this.h;..

PS 2022.04.21

자바(Java) 알고리즘 문제 풀이 - 회의실 배정

문제 이해 - 회의실을 사용할 수 있는 최대 회의수를 찾아라 해결 전략 - 회의들을 끝나는 시간을 기준으로 정렬합니다. - 하나의 회의를 선택하고, 그 회의의 끝나는 시간 이후에 있는 회의 중 가장 빠른 회의를 이어서 선택합니다. - 위의 전략을 반복합니다. 구현 import java.util.*; class Time implements Comparable{ public int s, e; Time(int s, int e) { this.s = s; this.e = e; } @Override public int compareTo(Time o){ if(this.e==o.e) return this.s-o.s; else return this.e-o.e; } } public class Main { public in..

PS 2022.04.20

자바(Java) 알고리즘 문제 풀이 - 섬나라 아일랜드(DFS)

문제 이해 - 섬의 개수를 구하라 해결 전략 - 2차원 board 배열을 순회하면서 board[x][y] = 1을 발견하면, DFS 순회를 시작합니다. - 한 번 방문한 점들은 board[x][y] = -1로 변경해서, 재방문하지 않도록 합니다. 구현 import java.util.*; public class Main { static int answer=0, n; static int[] dx={-1, -1, 0, 1, 1, 1, 0, -1}; static int[] dy={0, 1, 1, 1, 0, -1, -1, -1}; public void DFS(int x, int y, int[][] board){ for(int i=0; i

PS 2022.04.13

자바(Java) 알고리즘 문제 풀이 - 토마토(BFS 활용)

문제 이해 - 토마토들이 모두 익는데 걸리는 최소일수를 구하라. 해결 전략 - 큐에 board[x][y] = 1인 점들을 넣습니다. - 큐에서 값을 하나씩 제거하면서, 인접한 위치의 점이 (1) board 내부에 있고 (2) board[x][y]=0 이라면 해당 위치에 일수를 기록합니다. - dis배열에 기록된 값 중 최대값을 반환합니다. 구현 import java.util.*; class Point{ public int x, y; Point(int x, int y){ this.x=x; this.y=y; } } public class Main { static int[] dx={-1, 0, 1, 0}; static int[] dy={0, 1, 0, -1}; static int[][] board, dis; ..

PS 2022.04.13

자바(Java) 알고리즘 문제 풀이 - 미로의 최단 거리 통로(BFS)

문제 이해 - 미로에서 출발점에서 도착점까지 갈 수 있는 최단 거리를 구하라. 해결 전략 - BFS를 통해 다음 이동 가능한 점을 큐에 넣습니다. - dis 배열에 이동 거리를 기록합니다. - 방문한 점은 board[x][y] = 1로 바꾸어서 다시 방문하지 않도록 합니다. 구현 class Point{ public int x, y; Point(int x, int y){ this.x=x; this.y=y; } } public class Main { static int[] dx={-1, 0, 1, 0}; static int[] dy={0, 1, 0, -1}; static int[][] board, dis; public void BFS(int x, int y){ Queue q = new LinkedList()..

PS 2022.04.13

자바(Java) 알고리즘 문제 풀이 - 미로탐색(DFS)

문제 이해 - 미로에서 출발점에서 도착점까지 갈 수 있는 방법의 수를 구하라. 해결 전략 - DFS를 통해 점을 한 칸씩 이동한다. - 점을 이동하기 전에 board 내부에 있는 점인지, 방문한 적 없는 점인지 체크한다. - 한 번 방문한 점은 visited 배열을 통해서 true로 처리한다. 구현 import java.util.*; class Main { static int[] dx={-1, 0, 1, 0}; static int[] dy={0, 1, 0, -1}; static int[][] board; static boolean[][] visited; static int answer=0; public void DFS(int x, int y){ if(x == 7 && y == 7){ answer++; r..

PS 2022.04.13

코딩 인터뷰 완전 분석 1.5 하나 빼기

문제 이해 - 두 문자열의 편집 횟수가 1회 이내인지 확인하라 해결 전략 - 두 문자열의 길이가 같다면, 문자열을 순회하면서 다른 문자가 하나 이하인지 확인한다 - 두 문자열의 길이가 다르다면, 길이가 짧은 문자열을 기준으로 순회하면서 두 문자열이 다르다면, 해당 문자를 긴 문자열에서 제거해준다. 그 이후 두 문자열이 같은지 확인한다. 구현 import java.util.*; public class Main { public boolean solution(String s1, String s2){ int len1 = s1.length(); int len2 = s2.length(); if(len1 == len2){ int diffCnt = 0; for(int i=0; i= 2){ return false; }e..

PS 2022.04.11

코딩 인터뷰 완전 분석 1.4 회문 순열

문제 이해 - 문자열이 회문의 순열인지 아닌지를 판단하라 해결 전략 - 배열을 이용해서 문자열의 각 문자의 개수를 저장한다. - 회문의 순열이기 위해서는 홀수인 문자의 개수가 없거나, 하나만 존재해야 한다. 구현 import java.util.*; public class Main { public boolean solution(String s){ int[] arr = new int[30]; int oddCnt = 0; s = s.toLowerCase(); for(int i=0; i

PS 2022.04.11

코딩 인터뷰 완전 분석 1.3 URL화

문제 이해 - 문자열에 들어 있는 모든 공백을 '%20'으로 바꿔라 해결 전략 - replace 메소드를 사용해서 공백을 %20으로 변환한다. 구현 import java.util.*; public class Main { public String solution(String s){ s = s.replace(" ", "%20"); return s; } public static void main(String[] args){ Main T = new Main(); Scanner kb = new Scanner(System.in); String str=kb.nextLine(); System.out.println(T.solution(str)); } } 피드백 - replace 메소드 대신 replaceAll 메소드를 ..

PS 2022.04.11