목록Data Structure & Algorithm/PS - JAVA (270)
Dev.baelanche
감시카메라가 감시 가능한 모든 지역을 탐색하게 한다. 1번은 4가지 경우, 2번은 2가지, 3번은 4가지, 4번도 4가지, 5번은 1가지 경우가 있다. 모든 경우를 완전탐색하기만 하면 되는 문제인데 구현이 좀 까다롭다. public class Main { static int n; static int m; static ArrayList cctv = new ArrayList(); static int ans = Integer.MAX_VALUE; public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st..
백트래킹으로 모든 집에 대해 치킨거리를 구해야 한다. 배열을 쓰는 것보다는 집, 치킨집을 리스트에 담아서 구현하는게 빨라서 이중루프로 치킨거리를 구하게 했다. 치킨집 중에 M개 만큼의 치킨집을 골라 스택에 담아 백트래킹으로 탐색했고, 리스트를 쓰든 벡터를 쓰던 상관은 없다. 이 문제 역시 중복없는 완전탐색이 핵심이다. public class Main { static int n; static int m; static ArrayList h = new ArrayList(); static ArrayList ch = new ArrayList(); static Stack choice = new Stack(); static int ans = Integer.MAX_VALUE; public static void main..
백트래킹으로 바이러스를 모두 활성화 해보면서 모든 경우의 수를 체크한다. 시간제한이 굉장히 짧으므로 중복되는 백트래킹이 없어야한다. 예를들어, 바이러스 1번, 2,번 3번 을 활성화 한 후 BFS를 마쳤으면 1번, 3번, 2번 과 같은 경우는 없어야한다. 이는 백트래킹할때 변수를 넘겨주며 현재 활성화 한 바이러스번호 보다 높은 바이러스만을 활성화하게 하면 된다. public class Main { static int n; static int m; static int a[][]; static ArrayList virus = new ArrayList(); static int dx[] = {-1, 1, 0, 0}; static int dy[] = {0, 0, -1, 1}; static int min = Int..
https://www.acmicpc.net/problem/14891 14891번: 톱니바퀴 첫째 줄에 1번 톱니바퀴의 상태, 둘째 줄에 2번 톱니바퀴의 상태, 셋째 줄에 3번 톱니바퀴의 상태, 넷째 줄에 4번 톱니바퀴의 상태가 주어진다. 상태는 8개의 정수로 이루어져 있고, 12시방향부터 시계방향 순서대로 주어진다. N극은 0, S극은 1로 나타나있다. 다섯째 줄에는 회전 횟수 K(1 ≤ K ≤ 100)가 주어진다. 다음 K개 줄에는 회전시킨 방법이 순서대로 주어진다. 각 방법은 두 개의 정수로 이루어져 있고, 첫 번째 정수는 회전시킨 톱니바퀴 www.acmicpc.net 문제가 너무 길어 링크로 대체하겠다. 연속으로 시뮬레이션 문제를 풀었다. 삼성 역량 평가 문제들은 알고리즘 지식 보다 문제해결능력에 ..
구현만 잘하면되는 시뮬레이션 문제이다. N*N의 나무 배열에 여러개의 나무가 있을 수 있으므로 기본 배열이 아닌 리스트로 구현했다. 하지만 어린 나무부터 양분을 먹는 과정에서 리스트의 정렬이 시간초과를 야기하여 우선순위큐로 바꾸었다. 이러고도 30% 정도에서 시간초과가 발생되었고 죽은 나무를 보관하는 큐(원래 리스트였다)는 일반 배열로 바꾸어 정수값을 더해주는 형태로 바꿨다. 이 과정에서 pop, push 하는 횟수가 줄어들어 문제를 해결할 수 있었다ㅜㅜ 문제는 어렵지 않으므로 정확한 구현 + 시간절약 에 중점을 두어 풀어야 한다. public class Main { public static void main(String[] args) throws Exception { BufferedReader br =..
총감독관은 시험장마다 1명 있으므로 (응시자의 수 - B) 를 응시장마다 해준다. 남은 응시자는 C로 나누어주어 최소 수에 더해준다. 쉬운 문제임에도 불구하고 정답률이 낮은편인데, 아마 (응시자의 수 - B)의 과정에서 이 수가 음수가 되었을때의 예외를 고려하지 못해서인게 아닐까 싶다. public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st; int n = Integer.parseInt(br.readLine()); int a[] = new int[n]; st..
문제에서 요구한대로 해결해야하는 시뮬레이션 문제이다. 낚시 -> 상어의 이동 을 반복하며 잡은 상어의 크기를 누적해서 더한다. 두마리 이상의 상어가 같은 위치에 머물게 되면 가장 큰 상어만 남게되는 부분만 유의하면 된다. public class Main { static int R; static int C; static int m; static Shark a[][]; static ArrayList list = new ArrayList(); static int sum = 0; public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in));..
퇴근전에 5분만에 풀 수 있는 문제를 찾다가 이놈으로 골랐다. n이 최대 100000보다 작으므로 int 형으로 충분히 구현가능하여 문제에서 요구한대로 모든 약수의 합과 n을 비교하였다. public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(true) { StringBuilder sb = new StringBuilder(); int n = sc.nextInt(); if(n == -1) break; int sum = 0; for(int i=1; i