DNA 비밀번호 (백준 12891) 통과가 안됩니다.
525
1 câu hỏi đã được viết
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int[] myArr; // 내가 받은 문자열의 부분 문자열 조건 만족하는지 확인용
static int[] checkArr; // 주어진 부분 문자열 조건
static int checkSecret; // 모두 만족하는지 카운트
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
int S = Integer.parseInt(stringTokenizer.nextToken()); // 문자열의 길이
int P = Integer.parseInt(stringTokenizer.nextToken()); // 부분 문자열의 길이
int result = 0;
myArr = new int[4];
checkArr = new int[4];
checkSecret = 0;
char[] A; // 주어진 문자열을 담을 배열
A = bufferedReader.readLine().toCharArray();
stringTokenizer = new StringTokenizer(bufferedReader.readLine());
for(int i = 0; i < 4; i++) {
checkArr[i] = Integer.parseInt(stringTokenizer.nextToken());
if(checkArr[i] == 0) { // 주어진 조건이 0이면 이미 만족하기 때문에 checkSecret을 1증가시켜줌
checkSecret++;
}
}
for(int i = 0; i < P; i++) { // 부분 문자열 처음 받을때 세팅
Add(A[i]);
}
if(checkSecret == 4) {
result++;
}
for(int i = P; i < S; i++) { // 슬라이딩 윈도우
int j = i - P;
Add(A[i]);
Remove(A[j]);
if(checkSecret == 4) {
result++;
}
}
System.out.println(result);
bufferedReader.close();
}
private static void Remove(char c) {
switch (c) {
case 'A':
if (myArr[0] == checkArr[0]) {
checkSecret--;
myArr[0]--;
}
break;
case 'C':
if (myArr[1] == checkArr[1]) {
checkSecret--;
myArr[1]--;
}
break;
case 'G':
if (myArr[2] == checkArr[2]) {
checkSecret--;
myArr[2]--;
}
break;
case 'T':
if (myArr[3] == checkArr[3]) {
checkSecret--;
myArr[3]--;
}
break;
}
}
private static void Add(char c) {
switch (c) {
case 'A' :
myArr[0]++;
if(myArr[0] == checkArr[0]) {
checkSecret++;
}
break;
case 'C' :
myArr[1]++;
if(myArr[1] == checkArr[1]) {
checkSecret++;
}
break;
case 'G' :
myArr[2]++;
if(myArr[2] == checkArr[2]) {
checkSecret++;
}
break;
case 'T' :
myArr[3]++;
if(myArr[3] == checkArr[3]) {
checkSecret++;
}
break;
}
}
}로컬에선 문제없이 동작하는데 백준에서는 계속 통과가 안되네요.. 혹시 동일하신분들 계실까요?
Câu trả lời 2
0
안녕하세요. 혹시 해결하셨을까요?
case 'A':
if (myArr[0] == checkArr[0]) {
checkSecret--;
}
myArr[0]--;
break;
이런식으로 Remove()에서 myArr[]--;를 if문 바깥쪽으로 꺼내서 작성해보시면 될 것 같습니다
0
안녕하세요, 인프런 AI 인턴입니다.
제공해 주신 정보에는 백준 문제에 대한 구체적인 해결 방법이나 오류 해결에 대한 내용이 포함되어 있지 않습니다. 백준에서 문제를 해결하는 데 있어서는 다양한 이유로 문제가 발생할 수 있습니다. 예를 들어, 테스트 케이스를 충분히 고려하지 않았거나, 시간 초과, 메모리 초과 등의 문제일 수 있습니다. 로컬 환경에서는 문제 없이 동작한다고 하셨으니, 제출하신 코드의 로직 확인을 넘어 추가적인 테스트 케이스를 고려하거나, 다른 분들의 통과한 코드와 비교해 보는 것도 좋은 방법이 될 수 있습니다.
백준 같은 온라인 저지 시스템에서 문제가 지속될 경우, 문제의 토론 탭이나 다른 사용자들의 풀이를 참고하여 어떤 점이 다른지 비교해 보는 것이 도움 될 수 있습니다. 또한, 문제의 제한 조건을 다시 한번 확인하시며, 문제의 의도를 정확히 파악하시는 것도 중요합니다.
코드 최적화나 다른 알고리즘 접근 방식에 대해 고민해 보시고, 여전히 문제를 해결하는 데 어려움이 있다면, 구체적인 오류 메시지나 실패한 테스트 케이스와 함께 다시 문의해 주시면 좋을 것 같습니다.
백준 1940 주몽의 명령 시간복잡도
0
59
0
다음영상이 문제 풀이 영상이라고 하셨는데 문제풀이 영상이 누락되어있는 것 같습니다
0
127
1
코딩테스트 디버깅
0
344
1
탐색 순서 질문
0
148
1
[P11726 2*N 타일채우기] top down 방식을 사용하니 런타임 에러가 발생합니다.
0
105
1
2018 연속된 자연수의 합 구하기 백준 사이트에서 메모리 초과 오류가 발생합니다.
0
201
1
1강 시간복잡도 중간에 중첩for문 직전에 상수는 상관없어요 하신 부분이 이해가 안됩니다
0
159
1
왜 int, long은 안되는지 궁금합니다.
0
224
1
LCA 빠르게 구하기 Java 코드 시간초과
0
244
1
스택문제 백준 1874
1
459
1
백준11659 구간합 런타임 에러
0
306
1
백준 2178 미로탐색 질문 입니다.
0
448
1
구간합구하기1 (백준11659)
0
421
1
혹시 다른 ide에서 잘 돌아가는 프로그램이
0
349
1
내림차순으로 정렬하기 강의에서..
0
267
1
백준 11720 숫자의 합 질문 있습니다
0
433
1
(숫자의 합)1<=N <=100 사이의 값
0
383
1
소수구하기-백준 1929 질문
0
350
1
12891_DNA비밀번호
0
633
3
숫자의 합 구하기
0
389
1
안녕하세요 질문있습니다.
0
336
0
union 코드에 질문 있습니다.
0
399
2
[그리디 실전 문제] 최솟값을 만드는 괄호 배치 찾기 (백준 1541) - 반례를 못찾겠습니다 ㅠㅠ
1
308
1
[이진 탐색 실전 문제] 원하는 정수 찾기 편 질문
0
503
1

