문제
https://www.acmicpc.net/problem/1672
내가 작성한 코드
import java.io.*;
public class qor1672 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
String dna = br.readLine();
char result = dna.charAt(N - 1);
for (int i = N - 2; i >= 0; i--) {
char current = dna.charAt(i);
result = combine(current, result);
}
System.out.println(result);
}
private static char combine(char a, char b) {
switch (a) {
case 'A':
switch (b) {
case 'A': return 'A';
case 'C': return 'A';
case 'G': return 'C';
case 'T': return 'G';
}
break;
case 'C':
switch (b) {
case 'A': return 'A';
case 'C': return 'C';
case 'G': return 'T';
case 'T': return 'G';
}
break;
case 'G':
switch (b) {
case 'A': return 'C';
case 'C': return 'T';
case 'G': return 'G';
case 'T': return 'A';
}
break;
case 'T':
switch (b) {
case 'A': return 'G';
case 'C': return 'G';
case 'G': return 'A';
case 'T': return 'T';
}
break;
}
return ' ';
}
}
맨 처음엔 Python과 마찬가지로 Map에 규칙들을 다 저장해놓고
뒤에서부터 그 규칙들과 비교하며 문자열을 갱신하는 방식으로 작성했다.
"메모리 초과"를 만나버렸다
그래서 문자열 떄문인가 싶어 새로 만들지 말고 그냥 기존 변수를 이용하는 식으로 했는데 그래도
"메모리 초과" 뜨더라
그 순간, Map에 규칙들을 미리 다 저장해놓는 것이 원인이겠구나 싶었다.
그래서 즉각적으로 비교해줄 수 있는게 무엇이 있을까 생각했고
switch문을 이용한다면 Map을 이용해 거기서 찾는거보다 좋은 선택이 되지 않을까 싶었다
두 문자열을 이용해 1개의 새로운 염기가 나와야 하는거니 2개를 인자로 받아 return하도록 해주었다.
return ' ';은 도달하지는 않지만 컴파일 에러를 위해 추가해주면 좋다고 하더라.
'자바 > 백준' 카테고리의 다른 글
[백준 1764] 듣보잡_2 (0) | 2024.08.16 |
---|---|
[백준 9076] 점수 집계 (0) | 2024.08.16 |
[백준 2506] 점수계산 (0) | 2024.08.16 |
[백준 10798] 세로읽기 (0) | 2024.08.16 |
[백준 1032] 명령 프롬프트 (0) | 2024.08.16 |