Baekjoon
-
이번 문제는 투 포인터로 풀면 쉽게 풀 수 있는 문제이다. 먼저 고유한 번호들을 오름차순으로 정렬시킨다. 그 후 처음에 포인트 한 개, 마지막에 포인트 한 개를 두고 그 합을 M과 비교를 하면 된다. start와 end 포인트가 있다고 가정해보자. arr[start] + arr[end] > M 이면 오름차순이므로 end--를 해준다. 그 반대의 경우라면 start++를 해준다. 만약 두 수의 합이 M과 같다면 count++와 함께 start++, end--를 같이 해준다. 아래 코드를 보자. import java.util.*; import java.io.*; public class Main { public static void main(String[] args) throws IOException { Bu..
[백준] 투 포인터 - 1940_주몽 Java[자바]이번 문제는 투 포인터로 풀면 쉽게 풀 수 있는 문제이다. 먼저 고유한 번호들을 오름차순으로 정렬시킨다. 그 후 처음에 포인트 한 개, 마지막에 포인트 한 개를 두고 그 합을 M과 비교를 하면 된다. start와 end 포인트가 있다고 가정해보자. arr[start] + arr[end] > M 이면 오름차순이므로 end--를 해준다. 그 반대의 경우라면 start++를 해준다. 만약 두 수의 합이 M과 같다면 count++와 함께 start++, end--를 같이 해준다. 아래 코드를 보자. import java.util.*; import java.io.*; public class Main { public static void main(String[] args) throws IOException { Bu..
2024.02.02 -
이 문제는 쉽게 풀 수 있는 문제였지만 합 배열을 생각하다보니 좀 헤맸었다. 합 배열로 투 포인터를 사용해보려고 시도를 하다 책을 봤다. 이렇게 쉽게 푼다고...? 싶을 정도로 간단한 풀이방법.. 문제를 잘 보면 연속된 숫자라고는 하지만 단 하나의 숫자만 있어도 정답 처리가 된다,. 따라서 count는 1로 선언한다. 또한 start와 end도 1부터 시작을 해 차근차근 올라간다. start와 end 까지의 합이 N보다 작으면 end를 하나 올려주고 더 크면 start를 하나 올려준다. 만약 N과 같을 경우 count를 하나 올려주고 end를 올려준다. 코드를 보자. import java.io.*; public class Main { public static void main(String[] args) ..
[백준] 투 포인터 - 2018_수들의 합5 Java[자바]이 문제는 쉽게 풀 수 있는 문제였지만 합 배열을 생각하다보니 좀 헤맸었다. 합 배열로 투 포인터를 사용해보려고 시도를 하다 책을 봤다. 이렇게 쉽게 푼다고...? 싶을 정도로 간단한 풀이방법.. 문제를 잘 보면 연속된 숫자라고는 하지만 단 하나의 숫자만 있어도 정답 처리가 된다,. 따라서 count는 1로 선언한다. 또한 start와 end도 1부터 시작을 해 차근차근 올라간다. start와 end 까지의 합이 N보다 작으면 end를 하나 올려주고 더 크면 start를 하나 올려준다. 만약 N과 같을 경우 count를 하나 올려주고 end를 올려준다. 코드를 보자. import java.io.*; public class Main { public static void main(String[] args) ..
2024.02.02 -
이번 문제도 합 배열을 이용해 해결해야 하는 문제이다. 합 배열을 구하는 방법은 S[i] = S[i-1] + A[i] 이다. 위 예제를 기준으로 살펴보자. 합 배열은 [1, 3, 6, 7, 9]로 3으로 나눈 나머지의 배열은 [1, 0, 0, 1, 0]이다. S[i] % M = 0이고 S[j] % M = 0이면 (S[i] - S[j]) % M = 0 이다. 따라서 S[i] % M == S[j] % M인 i와 j를 찾으면 되므로 나머지 배열의 같은 값을 가진 인덱스 중에서 2개를 고른 뒤 정답에 추가해 주면 된다. import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOEx..
[백준] 구간 합 - 10986_나머지 합 구하기 Java[자바]이번 문제도 합 배열을 이용해 해결해야 하는 문제이다. 합 배열을 구하는 방법은 S[i] = S[i-1] + A[i] 이다. 위 예제를 기준으로 살펴보자. 합 배열은 [1, 3, 6, 7, 9]로 3으로 나눈 나머지의 배열은 [1, 0, 0, 1, 0]이다. S[i] % M = 0이고 S[j] % M = 0이면 (S[i] - S[j]) % M = 0 이다. 따라서 S[i] % M == S[j] % M인 i와 j를 찾으면 되므로 나머지 배열의 같은 값을 가진 인덱스 중에서 2개를 고른 뒤 정답에 추가해 주면 된다. import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOEx..
2024.01.31 -
바로 전 문제와 마찬가지로 구간합을 이용하면 풀 수 있는 문제이다. 다만, 구간 합을 구하는 방법이 전과는 달라졌다. 먼저 A[2,2] 까지의 합을 구하는 방법을 생각해보면 S[1,2] + S[2,1] - S[1,1] + A[2,2]로 나타낼 수 있다. 이것으로 보아 합 배열을 나타내는 표현식은 S[i,j] = S[i - 1, j] + S[i, j - 1] - S[i - 1, j - 1] + A[i, j] 이다. 위에 나온 예제를 활용하여 [2,2]부터 [3,4]까지의 합을 구해보면 S[3,4] - S[3,1] - S[1, 4] + S[1, 1]으로 표현이 가능하다. 이제 공식으로 변환을 하면 [x1, y1] 부터 [x2, y2] 까지의 합은 S[x2, y2] - S[x2, y1-1] - S[x1-1, ..
[백준] 구간 합 - 11660_구간 합 구하기 Java[자바]바로 전 문제와 마찬가지로 구간합을 이용하면 풀 수 있는 문제이다. 다만, 구간 합을 구하는 방법이 전과는 달라졌다. 먼저 A[2,2] 까지의 합을 구하는 방법을 생각해보면 S[1,2] + S[2,1] - S[1,1] + A[2,2]로 나타낼 수 있다. 이것으로 보아 합 배열을 나타내는 표현식은 S[i,j] = S[i - 1, j] + S[i, j - 1] - S[i - 1, j - 1] + A[i, j] 이다. 위에 나온 예제를 활용하여 [2,2]부터 [3,4]까지의 합을 구해보면 S[3,4] - S[3,1] - S[1, 4] + S[1, 1]으로 표현이 가능하다. 이제 공식으로 변환을 하면 [x1, y1] 부터 [x2, y2] 까지의 합은 S[x2, y2] - S[x2, y1-1] - S[x1-1, ..
2024.01.31 -
구간의 합을 구하는 문제이다. 이렇게 구간의 합을 구하는 문제는 반복문을 계속 돌리게 되면 시간을 더욱 낭비하게 된다. 이러한 문제는 구간 합 배열을 선언해준뒤 적용하여 문제를 풀 수 있다. 구간 합 배열은 i번째 인덱스에 있는 값이 i번째 전의 모든 인덱스에 해당하는 값에 i번째 인덱스에 해당하는 값을 넣는 것. 선언하는 방식 ==> S[ i ] = S[ i - 1 ] + A [ i ] 위의 합 배열만 잘 활용하면 무난하게 풀 수 있는 문제이다. import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new Buf..
[백준] 구간 합 - 11659_구간 합 구하기 Java[자바]구간의 합을 구하는 문제이다. 이렇게 구간의 합을 구하는 문제는 반복문을 계속 돌리게 되면 시간을 더욱 낭비하게 된다. 이러한 문제는 구간 합 배열을 선언해준뒤 적용하여 문제를 풀 수 있다. 구간 합 배열은 i번째 인덱스에 있는 값이 i번째 전의 모든 인덱스에 해당하는 값에 i번째 인덱스에 해당하는 값을 넣는 것. 선언하는 방식 ==> S[ i ] = S[ i - 1 ] + A [ i ] 위의 합 배열만 잘 활용하면 무난하게 풀 수 있는 문제이다. import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new Buf..
2024.01.31 -
[Bronze II] 먼저 알파벳 수와 맞게 배열을 선언한 후 -1을 전부 할당한다. 그리고 문자열의 길이만큼 반복문을 돌며 아까 선언한 배열에 해당 알파벳이 해당하는 인덱스의 값이 -1인 경우 문자열의 인덱스를 할당해주면 된다. import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int[] iarr = new int[26]; for(int i = 0; i < 26; i++) { iarr[i] = -1;..
[백준] 문자열 - 10809_알파벳 찾기 Java[자바][Bronze II] 먼저 알파벳 수와 맞게 배열을 선언한 후 -1을 전부 할당한다. 그리고 문자열의 길이만큼 반복문을 돌며 아까 선언한 배열에 해당 알파벳이 해당하는 인덱스의 값이 -1인 경우 문자열의 인덱스를 할당해주면 된다. import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int[] iarr = new int[26]; for(int i = 0; i < 26; i++) { iarr[i] = -1;..
2023.10.30 -
[Bronze IV] 숫자의 범위가 int나 long을 넘어가므로 String으로 받아 처리를 한다. 또한 char를 int로 변환했으니 아스키코드를 참고하거나 '0'을 빼줘야한다. 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.valueOf(br.readLine()); String number = br.readLine(); int sum = 0; for(int i = 0; i < N; i++) { sum += numb..
[백준] 문자열 - 11720_숫자의 합 Java[자바][Bronze IV] 숫자의 범위가 int나 long을 넘어가므로 String으로 받아 처리를 한다. 또한 char를 int로 변환했으니 아스키코드를 참고하거나 '0'을 빼줘야한다. 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.valueOf(br.readLine()); String number = br.readLine(); int sum = 0; for(int i = 0; i < N; i++) { sum += numb..
2023.10.30 -
[Bronze I] 이번 문제는 최대값을 잘 찾으면 쉽게 갈 수 있는 문제이다. 최대값은 Arrays 클래스의 sort() 메소드를 사용하여 제일 마지막 인덱스에 해당하는 값을 가져오면 된다. 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 M = Integer.valueOf(br.readLine()); StringTokenizer st = new StringTokenizer(br.readLine(), " ..
[백준] 1차원 배열 - 1546_평균 Java[자바][Bronze I] 이번 문제는 최대값을 잘 찾으면 쉽게 갈 수 있는 문제이다. 최대값은 Arrays 클래스의 sort() 메소드를 사용하여 제일 마지막 인덱스에 해당하는 값을 가져오면 된다. 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 M = Integer.valueOf(br.readLine()); StringTokenizer st = new StringTokenizer(br.readLine(), " ..
2023.10.30