Algorithm/Baekjoon
[백준] 2559 수열- Java
[백준] 2559 수열- Java
2022.05.08범위 나누고 계산해 최댓값을 계속 갱신해주면 된다. 입력이 음수로 들어올 수 있으니 ans의 초기값을 Integer.minvalue로 설정해줬다. import java.util.*; import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int N = Integer.parseInt(st.nextToken()); int K = Integer.parseInt(..
[백준] 2003 수들의 합2- Java
[백준] 2003 수들의 합2- Java
2022.05.08연속적인 합의 결과를 구하는 문제이니.. 딱 투 포인터로 풀면 되겠다고 생각된다. 처음 작성한 코드에서는 수열의 첫 번째 항이 구하려는 수와 같을 때를 잡아내지 못해서 헤멨다. 맞게 푼 것 같은데 틀리면 놓치기 쉬운 부분을 체크해보고, 극단적인 상황을 가정해서 테스트케이스를 유추해보자. import java.util.*; import java.io.*; public class Main{ public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.rea..
[백준] 16472 고냥이 - Java
[백준] 16472 고냥이 - Java
2022.05.08지난번에 풀었던 List of Unique Numbers문제와 유사한 방식으로 풀 수 있다. R을 가능한 만큼 보내고, R이 더 이상 갈 수 없으면 L을 움직이면서 계속해서 값을 누적시키는 방식으로 풀이하자. import java.util.*; import java.io.*; public class Main{ static int[] alpha; static int N; public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); N = Integer.parseInt(br.readLine()); String str = br.read..
[백준] 1253 좋다 - Java
[백준] 1253 좋다 - Java
2022.05.08지난번에 풀었던 두 용액의 투 포인터 풀이와 유사한 방식으로 풀 수 있다. 배열을 정렬한 후 최소값과 최대값의 결과에 따라 포인터를 이동시키며 풀 수 있는데, 여기서 찾으려고 하는 요소는 포함되면 안된다. 이 부분만 따로 처리해 주면 쉽게 풀 수 있다. import java.util.*; import java.io.*; public class Main{ static int[] arr; static int N; public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); N = Integer.parseInt(br.readLine()..
[백준] 13144 List of Unique Numbers - Java
[백준] 13144 List of Unique Numbers - Java
2022.05.08L과 R을 설정하고 빠르게 중복되는 수가 있는지 확인하자. 중복 여부를 빠르게 확인하기 위해 count배열을 사용했다. import java.util.*; import java.io.*; 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()); int[] arr = new int[N+1]; StringTokenizer st = new StringTokenizer(br.readLine()); for(int i=1; i
[백준] 1431 시리얼 번호 - Java
[백준] 1431 시리얼 번호 - Java
2022.05.06클래스 만들고 조건대로 CompareTo 메서드를 오버라이딩 해 주면 된다. 개인적으로 Comparable을 구현하는게 Comparator구현하는거보다 깔끔해 보이는 것 같다.. import java.util.*; import java.io.*; 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()); Serial[] arr = new Serial[N]; for(int i=0; i
[백준] 2866 문자열 잘라내기 - Java
[백준] 2866 문자열 잘라내기 - Java
2022.05.06인덱스 0부터 시작해서 문자열을 잘라내면서 접근하면 시간 초과가 발생한다. 빠르게 탐색할 수 있는 방법을 생각해야 한다. 임의의 k번째 인덱스부터 탐색을 시작한다고 생각해보자. k번째 인덱스에서 중복이 발생하면, 그 이후 인덱스에 대해서도 당연히 중복이 발생한다. 즉, 중복이 발생한 이후에는 쭉 중복이 발생한다. 이 부분에 집중하면, 이분 탐색으로 해결할 수 있다는 결론이 나온다. import java.util.*; import java.io.*; public class Main { static char[][] arr; static int R; static int C; static HashMap hm = new HashMap(); public static void main(String[] args) th..
[백준] 1637 날카로운 눈 - Java
[백준] 1637 날카로운 눈 - Java
2022.05.06입력으로 들어온 수 중 홀수 개 존재하는 수는 하나 뿐이다. 모든 경우를 싹다 찾아보며 문제를 풀려고 하면 당연히 시간 초과가 날 테니까.. 다른 방법을 생각해보자. 특정 정수 하나만 홀수 개 존재하고, 나머지 수는 모두 짝수개를 가진다.. 홀수 개 존재하는 정수보다 큰 정수에 대해서 개수의 합을 구하면 홀수 개가 나오고, 홀수 개 존재하는 정수보다 작은 정수에 대해서 개수의 합을 구하면 짝수 개가 나온다. 이 부분에 집중해서 매개 변수 탐색을 수행하자. import java.util.*; import java.io.*; public class Main { static int N; static int[][] input; //static long ans_num; static int max = Integer..
[백준] 13702 이상한 술집 - Java
[백준] 13702 이상한 술집 - Java
2022.05.06매개 변수 탐색을 활용해 풀 수 있는 문제이다. 0으로 나눠지는 경우 / int가 아니라 long으로 설정해야 함 위 두 가지만 신경쓰면 쉽게 해결할 수 있다. import java.util.*; import java.io.*; public class Main { static int N; static int K; static int max = Integer.MIN_VALUE; static int[] liter; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringT..
[백준] 2343 기타 레슨- Java
[백준] 2343 기타 레슨- Java
2022.05.05매개변수 탐색을 통해 풀 수 있는 문제이다. 이분탐색을 수행할 때 최솟값을 구하는 경우이므로 최댓값을 구하는 경우와 헷갈리지 말자. import java.util.*; import java.io.*; public class Main { static int N; static int M; static int[] lecture; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); N = Integer.parseInt(st.n..
[백준] 2512 예산 - Java
[백준] 2512 예산 - Java
2022.05.05매개 변수 탐색을 활용해 풀 수 있는 문제이다. 입력으로 들어온 예산들 사이에서 답을 구할 수 있으니, 0 ~ 최대 예산에 대해서 이분 탐색을 수행해 빠르게 답을 구하자. import java.util.*; import java.io.*; public class Main { static int N; static int M; static int[] money; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); N = Integer.parseInt(br.readLine()); money = new int[N+1]; Str..
[백준] 1654 랜선 자르기 - Java
[백준] 1654 랜선 자르기 - Java
2022.05.05매개 변수 탐색을 활용해 풀 수 있는 문제이다. 만들 수 있는 최대 랜선의 길이를 구하시오. => 특정 길이로 잘랐을 때 N개보다 많은 랜선을 얻을 수 있는가? 각 랜선의 길이는 정수 범위 안에서 결정된다. 랜선을 자르고 답을 갱신하다 보면 정수 범위를 초과할 수도 있을 것 같다. long타입으로 설정하고 풀자. import java.util.*; import java.io.*; public class Main { static int N; static int K; static int LAN[]; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamRead..