작성
·
211
·
수정됨
0
import java.time.Year;
import java.util.*;
class Main {
public static int solution(int N, int M, int[] arr) {
int answer = 0;
for (int lt = 0; lt < N; lt++) {
int sum = 0;
int rt = lt;
while (sum < M) {
sum += arr[rt];
rt++;
if (rt >= N) break;
if (sum == M) {
answer++;
}
}
}
return answer;
}
public static void main(String[] args){
Scanner kb = new Scanner(System.in);
int N = kb.nextInt();
int M = kb.nextInt();
int[] arr = new int[N];
for (int i = 0; i < N; i++) {
arr[i] = kb.nextInt();
}
System.out.println(solution(N, M, arr));
}
}
오답이 나와 확인해봤습니다.답이 1씩 낮아서 확인해보았는데(테스트의 N=100, M=100 지점), answer가 1씩 낮았습니다.답지와 제코드의 결과값을 비교해보았는데 너무 다른 양상이 나와 질문합니다.
답지
answer: 18 lt: 50 rt: 83 sum: 100
answer: 19 lt: 53 rt: 86 sum: 100
answer: 20 lt: 55 rt: 88 sum: 100
answer: 21 lt: 58 rt: 91 sum: 100
answer: 22 lt: 60 rt: 93 sum: 100
answer: 23 lt: 65 rt: 99 sum: 100
제 코드
answer: 16 lt: 46 rt: 77 sum: 100
answer: 17 lt: 49 rt: 83 sum: 100
answer: 18 lt: 50 rt: 84 sum: 100
answer: 19 lt: 53 rt: 87 sum: 100
answer: 20 lt: 55 rt: 89 sum: 100
answer: 21 lt: 58 rt: 92 sum: 100
answer: 22 lt: 60 rt: 94 sum: 100
어디가 잘못된걸까요?
답변 1
0
안녕하세요^^
while 문 안에 if문의 위치를 바꾸니 정답이라고 나옵니다. (위 코드는 "연속 부분수열" 문제입니다)
import java.util.*;
class Main {
public int solution(int N, int M, int[] arr) {
int answer = 0;
for (int lt = 0; lt < N; lt++) {
int sum = 0;
int rt = lt;
while (sum < M) {
sum += arr[rt];
if (sum == M) {
answer++;
}
rt++;
if (rt >= N) break;
}
}
return answer;
}
public static void main(String[] args){
Scanner kb = new Scanner(System.in);
Main T = new Main();
int N = kb.nextInt();
int M = kb.nextInt();
int[] arr = new int[N];
for (int i = 0; i < N; i++) {
arr[i] = kb.nextInt();
}
System.out.println(T.solution(N, M, arr));
}
}