본문 바로가기

전체 글

(72)
백준(17281번) - ⚾(Java) (구현) 문제가 길지만, 야구와 규칙이 같다. 감독이 선수들의 순서를 정해놓고 뽑을 수 있는 최대 점수를 구하는 문제인데 나름 규칙을 정해 배치하려고 했었다.1. 아웃을 하는 타자들은 무조건 현재 번호 앞쪽에 배치한다.2. 그리고 나머지 선수들은 최대한 베이스를 꽉꽉 채우는 방식으로 배치한다. 이렇게 이닝마다 배치를 하려고 했지만 문제를 읽어보면 알듯이타순은 이닝이 변경되어도 순서를 유지해야 한다.라는 조건이 걸려있었음에도 이를 잊고 알고리즘을 짜려고 했던 것이다. 문제에 부합하는 결과를 얻어내기 위해서는 결국 8! 의 경우의 수를 다 따져보는 수밖에 없다 40320가지라 1초 안에 문제없이 해결될 것이다.https://www.acmicpc.net/problem/17281 import java.util.*;imp..
백준(19640번) - 화장실의 규칙(Java) (구현) 입사 일 수가 부족하면 화장실도 마음대로 못 가는 참 불쌍한 상황이지만, 우선순위가 명확하게 결정되어 있는 만큼 우선순위 큐를 사용해야 한다. 사람들의 입장을 하나의 배열(employees)에 받아두고, 하나씩 줄의 선두에 배치시켜 보면서 누가 화장실 사용권한이 있는지 파악해주면 될 것이다. 이 사용권한이 누구에게 있는지 부분이 우선순위 큐로 처리될 부분이다. Comparable 선언만 주의 깊게 해준다면 무리없이 풀 수 있을 것이다.https://www.acmicpc.net/problem/19640  import java.util.*;import java.io.*;public class Main { static class Toilet implements Comparable { int ..
백준(4179번) - 불! (Java) (BFS) 지훈이는 살기 위해서 불을 피해 달아나야 하기 때문에 지훈이가 이동하기 전에 불을 먼저 이동시켜 그 중에서 불타지 않은 모든 타일로 이동해 경우의 수를 따져줘야 한다. 이를 명심하며 감정이입해서 풀어가보자! 불의 모든 이동경로를 예측해야한다...https://www.acmicpc.net/problem/4179import java.util.*;import java.io.*;public class Main { static int r, c; static int ans = Integer.MAX_VALUE; static char[][] map; static boolean[][] visit; static int[] dr = {-1, 1, 0, 0}; static int[] dc = ..
백준(4386번) - 별자리 만들기 (Java) (BFS) 비용을 기준으로 오름차순인 우선순위 큐를 사용한다면, 비용을 가장 아끼는 경우를 1순위로 생각하기 때문에, ans에 거리비용을 지속적으로 쌓아준다면 최소비용을 구할 수 있을 것이다. pq 첫 시작에 0으로 시작하였지만, 를 계속 고민하였으나, 0 -> 1 -> 2 로 잇던, 2 -> 1 -> 0로 잇던 같은 케이스이기 때문에 따져줄 필요가 없다고 생각했다.https://www.acmicpc.net/problem/4386import java.util.*;import java.io.*;public class Main{ static class node{ double x; double y; public node(double x, double y){ this.x = x; this.y = y; }..
백준(1082번) - 방 번호(Java) (그리디, DP) DP와 그리디가 섞인 문제이다. 처음에는 뒷 숫자부터 무작정 앞으로 갖다 붙이면 될 줄 알았다. import java.util.*; import java.io.*; import java.math.*; public class Main { public static void main (String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); StringTokenizer st = new StringTokenizer(br.readLine()); int[] price = new int[n]; for(int..
백준(1600번) - 말이 되고픈 원숭이(Java) (BFS) 원숭이 상태일 때는(동, 서, 남북) 말을 흉내 낼 때는 말의 움직임을 보이는 특이한 친구다. 말은 체스의 나이트와 같은 움직임(중간의 장애물 무시)을 보인다. 그렇다면 둘 다 착지지점이 장애물이 있는가만 판단해 주면 된다. 한 번에 통과는 못 했는데 내가 했던 무식한 실수 때문이다. 말의 움직임과 원숭이의 움직임을 if else로 하나의 덩어리로 묶어버린 실수였다. 이 부분만 유의해주고 방문처리를 할 boolean 배열을 3차원으로 구성해야만 하는데 이유는 주석에 열심히 설명해 놨다! 이외에는 일반 bfs를 구현해 주면 된다. https://www.acmicpc.net/problem/1600 1600번: 말이 되고픈 원숭이 첫째 줄에 정수 K가 주어진다. 둘째 줄에 격자판의 가로길이 W, 세로길이 H가..
백준(14890번) - 경사로(Java) (구현) 동서남북 4곳 모두에서 반대쪽으로 지나간다고 되어 있으니, 간단하게 (북 -> 남 / 서 -> 동) 이 2가지 경로만 반대쪽으로 넘어갈 수 있는지 검사해 봤다. 각각의 경우 안에서도 또 2가지 경우로 나눠지는데 북(서) -> 남(동)으로 움직이는 도중 1. 앞칸이 지금 칸보다 한 칸 낮은 경우 2. 앞칸이 지금 칸보다 한 칸 높은 경우 총 4가지 경우의 수를 고려해서 작성해 봤다. import java.util.*; import java.io.*; public class Main { static int n, l, ans; static int[][] map; public static void main (String[] args) throws IOException { BufferedReader br = ne..
프로그래머스(Lv.3) - 등대(Java) 요즘 자꾸 참고만 하는 느낌인데;; 내 나름대로 코드를 작성하고 제출을 해봤지만 끝내 답을 맞힐 수는 없었다. import java.util.*; /* 오가는 뱃길 => 무방향 그래프 한 뱃길의 양쪽 끝 중 하나 => 두 노드 사이에서 하나는 켜야한다는 의미 말단에서(리프노드)에서부터 무조건 시작 */ class Solution { static ArrayList[] list; static boolean[] on; public int solution(int n, int[][] lighthouse) { int ans = 0; list = new ArrayList[n+1]; on = new boolean[n+1]; for(int i = 1 ; i