import java.util.LinkedList; import java.util.Queue; class Solution { int moveCount; int[][] gameBoard; public int solution(int[][] board, int r, int c) { int answer = 0; moveCount=Integer.MAX_VALUE; gameBoard=board.clone(); if(board[r][c]!=0) dfs(1,r,c,board[r][c]); else dfs(0,r,c,board[r][c]); return moveCount; } void dfs(int depth, int x,int y,int select){ if(depth>=moveCount) return; if(sele..
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; class Solution { public int solution(int[] a) { int answer = 0; Map numberMap=new HashMap(); for (int i : a) { if(numberMap.containsKey(i)){ numberMap.put(i,numberMap.get(i)+1); }else{ numberMap.put(i,1); } } List maxKeyList=new ArrayList(); int maxValue=0; for (Integer integer : numberMap.keySet()..
class Solution { public long solution(int n, int[] times) { long maxTime=0; for (int time : times) { maxTime=Math.max(maxTime,time); } long right=maxTime*n/times.length; long answer = right; long left=0; while (left
import java.util.*; class Solution { public int solution(int[][] routes) { int answer = 0; List routeList=new ArrayList(); for (int[] route : routes) { routeList.add(new Route(route[0],route[1])); } Collections.sort(routeList); int nowEnd=routeList.get(0).end; answer++; for (int i = 1; i nowEnd){ //need camera answer++; no..
class Solution { public long solution(int a, int b, int[] g, int[] s, int[] w, int[] t) { long left=0; long right=(long)(10e9*2*10e5*2); long answer = right; while (left=t[i]){ //현재 시간(mid)에서 왕복하고 남은 시간이 편도 보다 크거나 같다면 한번 더 가도 됨 move++; } //현재 시간만큼 왕복해서 자원을 채취한다 //현재 시간에 자원을 모두 캘 수 있다면 모두 캐고, 그렇지 않다면 캘 수 있는 만큼만 캔다 gold+=Math.min(g[i],move*w[i]); silver+=Math.min(s[i],move*w[i]); sum+=Math.min(g[i..
뭔가 문제를 보자마자 딱 떠오른 생각들이 전부 비효율적일거라 생각되어 쉽사리 접근하지 못했던 문제였다. 고민하다 선택한 방법은 매 회차에서 보석을 기준으로 새로운 집합을 만들어 검증할 리스트에 추가하고, 검증 리스트를 돌며 모든 보석을 모은 집합을 대상으로 최소 갱신을 한 후 해당 집합을 리스트에서 삭제하며, 이 과정에서 리스트에 있는 값들 중 현재 최소 거리보다 이미 큰 거리를 가진 집합들은 모두 삭제하였다. 이걸 주어진 보석 배열을 전부 순회하며 실행하면, 문제에서 요구하는 답을 얻을 수 있다. 하지만 이 코드 역시 시간초과가 났다. 모든 보석 배열을 순회하는데 그 안에서, pickedGemList를 계속 돌기에 효율적이지 않은 것이다.. 아래는 내가 제출했던 시간초과 코드이다. import java..
맨 앞,뒤는 해당 풍선을 제외하고 남은 풍선을 모두 큰 풍선만 골라 터트린다면 남은 풍선과 맨 앞(뒤)풍선 중 어떤게 크든 작든 아직 작은 풍선을 터트리는 기회가 남아 있기에 무조건 남길 수 있다. 여기서, 더 나아가면 3개의 풍선이 있다고 했을 때, 가운데 풍선이 양 옆의 풍선보다 크다면 절대 풍선을 남길 수 없다 ( 수가 더 작은 풍선을 터트리는 기회는 최대 1회 이므로) 여기서 잘 생각해보면 i번째 풍선을 남기기 위해선 0~i-1번째 풍선을 모두 수가 큰 풍선만 터트려 1개를 남기고 i+1~n번째 풍선을 마찬가지로 큰 풍선만 터트려 1개를 남긴 후 이 3개의 풍선을 비교하여 i가 제일 크다면 i번째 풍선을 절대 남길 수 없게된다. 이제 푸는 방법을 알았으니 코드로 구현해보면 배열을 0번부터 끝까지 ..