목록Data Structure & Algorithm/PS - JAVA (270)
Dev.baelanche
원래 단어와 사전의 단어를 각각 가리키는 포인터를 둔다. D E V I L I V D E V I L I V I 시작시 포인터위치는 양쪽 다 0이며 D, D를 비교한다. D E V I L I V D E V I L I V I 일치시에 양 포인터가 오른쪽으로 한칸 움직인다. D, E, V, I, L, I, V가 모두 일치하므로 포인터는 7번째 문자를 가리킨다. 원래단어의 포인터가 끝위치일때는 사전단어의 포인터만 움직이며 갑분싸 가성비가 그만큼 줄어든다. 다른 예시를 보자 D E V I L I V D E N V E R 포인터가 3번째 위치일때 글자가 서로 다르다. 이럴때는 사전단어의 포인터 위치만 증가하며 맞을때까지 움직인다. 단어가 일치하지 않으므로 갑분싸 가성비는 감소한다. 원래 단어 3번째, 사전 단어 4..
n이 10이하일때 1 n이 110이하일때 2 n이 1110이하일때 3 .... 순으로 구매해야하는 스티커가 늘어난다. public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); if(n >= 0 && n = i && n
완전탐색으로 풀기엔 주어진 시간이 너무 짧다. 사탕배열을 만들어 사탕이 있는지 여부를 저장해놓고 DP배열로 매 탐색마다 최대로 먹을수 있는 사탕의 개수를 갱신한다. public class Main { static boolean a[][]; static int dp[][]; public static int findCandy(int x, int y, int m) { if(x == 301 || y == 301) return 0; if(m == 0) return 0; if(dp[x][y] != -1) return dp[x][y]; if(a[x][y]) dp[x][y] = m; else dp[x][y] = 0; dp[x][y] += Math.max(findCandy(x+1, y, m-1), findCandy(x,..
매 케이스마다 주어진 문자열을 한칸씩 밀어주면서 사전의 단어를 포함하는지 확인하면 된다. public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String cipher = sc.next(); int n = sc.nextInt(); String s[] = new String[n]; for(int i=0; i
중간에 단 한번이라도 울림 제미니스의 점수가 높은지를 체크해야한다. 1회초, 1회말 ...... 9회초, 9회말 순으로 점수를 비교하며 한번이라도 울림쪽이 이기고 있다면 Yes를 출력해주자. public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a[] = new int[9]; for(int i=0; i
10^2 마다 그 중간값이 사랑스러움 수치가 가장 크다는걸 눈치채야한다. 1~9 : 5 10~99 : 50 100~999 : 500 ... 순이다. 4, 49, 499도 위 숫자의 사랑스러움 값과 동일하다. n이 두자리수이고 50보다 작다면 n의 사랑스러움 수치가 최대값이다. 값이 int의 범위를 가뿐히 넘어가므로 적절한 자료형으로 풀어주자. public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int t = sc.nextInt(); while(t-->0) { int k = sc.nextInt(); for(long i=10; true; i*=10) { if(k < i) { if(k <..
위 문제를 풀기위한 구조들로 1. 팀 번호, 문제 번호 별로 푸는데 걸린시간을 저장한 배열 int t[][] = new int[n+1][m+1]; 2. 팀 번호, 푼 문제 수, 총 걸린 시간을 저장한 클래스 를 만들어 주었다. static class Team { int no; int solve; int time; Team(int no, int solve, int time) { this.no = no; this.solve = solve; this.time = time; } } 먼저 RE, TLE, WA의 경우에는 팀 번호, 문제 번호 별로 걸린시간을 더해준다. if(result.equals("WA") || result.equals("RE") || result.equals("TLE")) t[teamNo][p..
문제 내용은 읽을 필요가 전혀 없고 출력부분에 (|N-M|) 만 확인하면 된다. |-2000000000 - 2000000000| 의 경우 int형을 초과하게 되므로 long타입으로 선언해주면 된다. 쉬운문제이다 보니 이부분을 간과하여 정답률이 꽤나 낮은듯하다. public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); long n = sc.nextInt(); long m = sc.nextInt(); System.out.println(Math.abs(n - m)); } }