문제가 참 완탐스럽게 생겼다 처음에는 그리디로 쭉 보는건가 싶었는데 하다보니.. 그냥 편하게 백트래킹으로 풀었따 모든경우의 수 중에서 가지치기를 하면서 보면 시간안에 빠르게 들어온다 먼저 총 15가지의 라운드가 있고 각 라운드는 3가지의 경우의 수가 가능하다 그래서 3^15의 경우의 수가 있다 이 중에서 우리는 4개의 입력으로 받은 조건들을 만족하는 경우를 찾아야 한다 그래서 입력조건을 벗어나는 경우는 적절하게 가지치기를 해줘야한다 나의 경우는 order라는 배열에 일단 15라운드의 prev VS next를 다 저장했다 ex) [A,B],[A,C],[A,D]...[E,F] 그 후 order배열에 0(prev 승),1(무),2(prev 패)를 넣어보면 된다 그러게 status라는 배열에 현재 라운드의 결과..
3개로 묶었을 때 그 중 가장 작은 옷값은 할인을 해준다 그럼 그리디로 생각해서 묶으면 된다 어차피 제일 큰건 할인 못받는다 3*k 번째로 큰 애들만 할인 받을 수 있다 편하게 pq에 값을 넣고 탐색해보자! 자바는 min heap 이므로 -를 붙여서 넣으면 최대힙으로 바꿀 수 있다 그리고 pq에서 하나씩 꺼내보며 만약 3*k 번째 옷이라면 값을 더하지 말자! 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 import java.util.PriorityQueue; import java.util.Scanner; public class Solution { public static void mai..
숫자 제한들이 아주 작아서 그냥 제한 생각안하고 돌려도 잘 풀리는 문제다! 일단 인구이동을 어떻게 시킬지 생각해보자 간단하게 DFS를 이용하면 된다 나와 인접한 마을중 인구수 차이가 L이상 R 이하라면 그곳의 인구를 더해주고 체크해주자 이렇게 내가 갈 수 있는 마을의 모든 인구를 더하고 순서를 order에 담아 기억해주자 그럼 dfs가 끝나고 인구의 총 합 / 탐색한 마을로 order를 통해 사이좋게 나눠가지면 된다 이걸 언제까지해야할까 그냥 이동 할 일이 없을때까지 해보자! 이동이 없을 조건은 나 자신만 탐색하고 끝나는 경우다 그걸 cnt의 수가 1이하라면 안하는걸로 했다! 쉽게 생각하고 생각없이 짜면 잘 풀린다..! 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ..
문제를 푸는것보다 이해하는게 더 어려운 문제같다 문제를 풀려면 그냥 쓰여져있는대로 코딩하면 된다! 하라는대로!! a와 b가 i-1이하기 때문에 무조건 이전에 계산한 식을 통해 값을 구할 수 있다 그럼 for문을 통해 N-1개의 값들을 먼저 저장하고 그걸 이용해서 f(x)값을 구해보자! 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 import java.util.Scanner; public class Solution { static class Node { int tx,ax,bx; Node(int _t..
쉬운줄알았는데 좀 고민하게 해준 문제다 먼저 비슷만 문제는 백준의 숨바꼭질 5(https://sejinik.tistory.com/194)다 이 문제는 모든 경우를 DFS로 다 해보면 답이 나오지만 그냥 하면 시간초과 난다 그럼 시간을 줄이기 위해서 어떻게 해야할까? 한번 생각해보자 내가 홀수일때 방문한곳은 다음 홀수에도 방문할 수 있다 반대로 짝수도 마찬가지다 예를들어 123-213-123 이런식으로 2차이나면 원래자리로 다시 돌아올 수 있다 그럼 우리는 방문할 수 있는 숫자 중에서 홀,짝으로 나눠서 방문했는지 체크를 해보면 된다! 내가 만약 다음 방문할 곳에 홀수번만에 갈 때 이전에 홀수번에서 방문했다면 방문하지않는다! 아니라면 방문하면된다!! 그럼 시간안에 dfs를 통해 답을 찾아갈 수 있다! 소스코..
그리디 문제다 정렬을 시키고 뒤에 화학물질부터 보면된다 냉장고의 (x,y)라고 할 때 y를 기준으로 잡고 다음 화학물질의 x가 현재 y를 넘는지 안넘는지로 판단할 수 있다 넘는다면 같은 냉장고안에 넣을 수 있다 그리고 y값은 더 뒤에있는 값으로 초기화해준다 그리고 범위를 안넘으면 냉장고를 늘려주면 된다! 자바는 pair가 없어서 구현해야한다..! 그리고 pq는 minheap이다!! JAVA 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 import java.ut..
이진트리로 주어진 사칙연산이 유효한지 출력하는 문제다 입력이 조금 복잡하게 들어오는거 빼고는 크게 어렵지는 않은 문제다! 문제의 조건을 생각해보면 내가 현재 노드가 숫자일 때, 연산자일 때 나눠보면 된다 1. 숫자일 때 => 자식을 가지고 있으면 무조건 false다 2. 연산자라면 => 내 자식 두명을 재귀타고가서 둘다 참이라면 true다 코드가 좀 헷갈릴 수 있지만 재귀적으로 생각하면 쉽게 풀 수 있다! 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 import java.util.*; import java.io.*; public class So..
이 문제는 스택의 개념으로 풀면 된다 0이 나오면 pop 아니면 push다 물론 진짜 스택을 만들 필요는 없다 배열을 이용해서 스택처럼 쓸 수 있다! 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 package SWEA; import java.util.Scanner; public class Solution_d3_8931_제로 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); int T = sc.nextInt(); for(int test_case=1;test..
Java 마스터를 위해 SWEA d3문제를 다 풀어보도록하겠다..! 이 문제는 N이 1000이하고 2개만 고르기때문에 2중포문으로 쉽게 풀 수 있다! 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 package SWEA; import java.util.Scanner; public class Solution_d3_9229_한빈이와SpotMart { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); int T = sc.nextInt(); for(int tes..