Playground 172

[백준] 21736번

int형의 2차원 배열(map)을 선언하고 다음과 같은 규칙을 통해 값을 넣어줬다. /* 0 : 빈 공간, 도연이 1 : 벽 2 : 사람 */ 그리고 도연이의 위치를 저장해두고 dfs(도연이의 y 좌표, 도연이의 x좌표)를 돌려서 해결! public class Main { static int[][] map; static boolean[][] check; static int[] dx = new int[]{0, 1, 0, -1}; static int[] dy = new int[]{1, 0, -1, 0}; static int N, M, peoples = 0; public static void main(String[] args) throws IOException { BufferedReader br = new B..

[백준] 11123번

끝까지 전부 순회하면서 양이 몇 무리 있는지를 세야하는 문제라 DFS로 풀었다. 다른 문제들과는 달리 map이 숫자로 이루어진 게 아니라, 문자로 이루어져있기 때문에 boolean 으로 2차원 배열을 만들어줬다. dfs를 돌면서 상하좌우를 살필 때, 경계 조건을 잘 설정하지 않으면 ArrayIndexOutOfBoundsException이 발생하니 주의해야 한다. 처음에는 BFS, DFS를 이해하는 게 정말 어려웠는데, 기초 문제부터 하나씩 풀다보니까 슬슬 감이 잡히는 것 같다. BFS, DFS.. 좋아지기.. 시작.. public class Main { static boolean[][] map; static boolean[][] check; static StringBuilder sb = new Strin..

[백준] 1817번

아ㅏㅏㅏㅏㅏㅏㅏ주 그냥 허를 찌르는 문제를 만났다. 제출하면 자꾸 NPE가 발생하는데, 도대체 어디서 발생하는 건지 알 수가 없었다. 하지만 문제를 똑바로 읽지 않은 나의 실수였으니... 첫 번째, N이 0보다 크거나 '같고'.. 같다는 가정을 하지 않았다. 그래서 N이 0일 경우에는 0을 반환하도록 만들었지만 여전히 NPE는 발생했다. 두 번째, 다시 문제를 자세히 살펴보니 'N이 0보다 큰 경우에' 무게가 주어진다고 했다. 설마 N이 0이면 아예 둘째 줄에 추가 정보가 들어오지 않나?? 하고 0을 반환하는 코드를 StringTokenizer를 받기 전으로 옮기니까 통과했다. 제출 코드 public class Main { public static void main(String[] args) throws..

[백준] 1764번

기존에 풀었던 방식은 HashMap에 먼저 '듣도 못한 사람'을 모두 넣어둔 다음, '보도 못한 사람'을 map에 넣어주면서 만약 map에 해당 키가 있으면 value를 증가시켜서 중복 검사를 했었다. 이렇게 중복된 애들을 ArrayList에 넣고 sort 함수로 정렬해서 return. 후에 자료구조를 공부하다 TreeSet을 사용하면 어떨까 생각이 들어 다시 풀어봤다. 그러면 sort 함수를 사용할 필요도 없고 애초에 '듣도 못한 사람'을 모두 HashSet에 넣어둔 다음, '보도 못한 사람'들을 입력하면서 조건문을 통해 TreeSet에 넣어주면 자동으로 오름차순 정렬되니까 바로 return 하면 되지 않을까? 맨처음 풀었던 HashMap + ArrayList + sort() 방식 public clas..

[백준] 5430번

기존에 직접 LinkedList를 만들어서 (삽입, 수정이 빈번하게 발생하므로) 로직을 수행하게 만들었다. 테스트케이스를 입력해서 실행했을 때 결과는 잘 나오지만 결과는 시간초과.. 시간 복잡도를 고려했을 때 왜 시간 초과가 발생하는 지 알 수가 없었다. 다른 분의 블로그를 참고해보니 배열을 뒤집는 과정에서 시간 초과가 발생했을 것이라고 하셨다. 이 분은 Deque를 활용하셨는데 생각해보니 배열을 뒤집을 필요 없이 R 키워드가 주어지면 왼쪽에서부터 or 오른쪽에서부터만 결정하면 되는 것이었다. 이해하기 쉽게 설명해 주셔서 자주 보는 블로그인데 이번에도 역시.. 또 하나를 배워간다. 데큐 메모 [백준] 5430번 : AC - JAVA [자바] www.acmicpc.net/problem/5430 5430번:..

[백준] 1049번

1. 세트와 낱개를 구매하는 경우 2. 세트로만 구매하는 경우 3. 낱개로만 구매하는 경우 이 3가지 경우의 수 중에서 가장 작은 수를 구하는 게 포인트이다. public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int N = Integer.parseInt(st.nextToken()); // 끊어진 기타줄의 개수 int M = Integer.parseInt(st.nextToken());..

[백준] 14469번

소가 들어오는 시간과 통과하는 데 걸리는 시간을 배열로 만들어서 오름차순으로 정렬해준다. 그리고 배열을 순회하면서 바로 앞의 소가 검문받는 중이면 기다리는 시간만큼 추가해줬다. public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st; int N = Integer.parseInt(br.readLine()); int[][] line = new int[N][2]; for (int i = 0; i < N; i++) { st = new StringTokenizer..

[백준] 11724번

방문하지 않은 곳(visited[] 가 false)들을 dfs로 순회하고 dfs 메서드가 돌아갈 때마다 count를 1씩 증가시켜줬다. public class Main { static int[][] map; static boolean[] visited; static int N; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); N = Integer.parseInt(st.nextToken()); // 정점의 개수 int..

[백준] 2667번

DFS를 통해 문제를 해결했다. 문제에 집의 수를 오름차순으로 정렬하라는 문구를 보지 않아서 인텔리제이로 코드를 실행하면 성공했지만 제출하니까 틀렸다고 나왔었다. 문제를 꼼꼼히 확인하자..! public class Main { static int N, count; static int[][] map; static boolean[][] visited; static List list = new ArrayList(); static int[] dx = new int[]{0, 1, 0, -1}; static int[] dy = new int[]{1, 0, -1, 0}; public static void main(String[] args) throws IOException { BufferedReader br = ne..