지난번까지는 C로 코딩했는데 어제까지 자프실 시험보느라 자바가 더 익숙해져서 이번엔 JAVA로 백준을 풀어봤다.
계속 런타임 에러가 나서 구글링 해봤더니 백준에 코드 제출할 때는 class이름을 꼭 Main으로 써야한다는 걸 알았다.
별도의 package를 사용하면 안돼서 꼭 패키지도 지우고 제출해야한다는 것도 새로 알았다.
오늘 풀어본 두 문제는 <자료구조 구간 합>에 대한 내용이었는데 https://velog.io/@isohyeon/Java-%EB%B0%B1%EC%A4%80-11660-%EA%B5%AC%EA%B0%84-%ED%95%A9-%EA%B5%AC%ED%95%98%EA%B8%B0-5
이거 참고해서 1,2차원 배열의 구간 합 계산방법 이해하고 적용했다!
백준 11659번
11659번: 구간 합 구하기 4 (acmicpc.net)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
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 M = Integer.parseInt(st.nextToken());
int[] arr = new int[N + 1];
StringBuilder sb = new StringBuilder();
st = new StringTokenizer(br.readLine());
for(int i = 1; i <= N; i++) {
arr[0] = 0;
arr[i] = arr[i - 1] + Integer.parseInt(st.nextToken());
}
for(int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
sb.append(arr[end] - arr[start - 1]).append("\n");
}
System.out.println(sb);
}
}
백준 11660번
11660번: 구간 합 구하기 5 (acmicpc.net)
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());
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int[][] arr = new int[n+1][n+1];
int[][] dp = new int[n+1][n+1];
for (int i = 1; i <= n; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 1; j <= n; j++) {
arr[i][j] = Integer.parseInt(st.nextToken());
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
dp[i][j] = dp[i-1][j] + dp[i][j-1] - dp[i-1][j-1] + arr[i][j];
}
}
for (int k = 1; k <= m; k++) {
st = new StringTokenizer(br.readLine());
int x1 = Integer.parseInt(st.nextToken());
int y1 = Integer.parseInt(st.nextToken());
int x2 = Integer.parseInt(st.nextToken());
int y2 = Integer.parseInt(st.nextToken());
int ans = dp[x2][y2] - dp[x2][y1-1] - dp[x1-1][y2] + dp[x1-1][y1-1];
sb.append(ans + "\n");
}
System.out.print(sb);
}
}
'Ec.crew 스터디' 카테고리의 다른 글
11월 3주차 Ec.crew (스택) (0) | 2022.11.17 |
---|---|
11월 2주차 Ec.crew (그리디 알고리즘, 우선순위 큐) (0) | 2022.11.10 |
구름 C언어 후반부 (0) | 2022.09.22 |
백준 1057번 토너먼트 (1) | 2022.09.22 |
구름 C언어 전반부 (0) | 2022.09.08 |