작성
·
196
1
14e972338646
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
int num = Integer.parseInt(kb.nextLine());
String str = kb.nextLine();
solution(str, num);
kb.close();
}
private static void solution(String str, int num) {
List<String> binlist = new ArrayList<>();
for (int i = 0; i < str.length(); i += (str.length() / num)) {
int end = Math.min(i + str.length() / num, str.length());
binlist.add(str.substring(i, end));
}
for (String each : binlist) {
StringBuilder tmp = new StringBuilder();
for (char mos : each.toCharArray()) {
if (mos == '#')
tmp.append(1);
if (mos == '*')
tmp.append(0);
}
binlist.set(binlist.indexOf(each), tmp.toString());
}
for(String each : binlist){
solution2(each);
}
}
private static void solution2(String bin) {
int ascii = Integer.parseInt(bin,2);
System.out.print((char)ascii);
}
}
다른 질문 글에도 런타임 에러 질문이 있는거 같은데 명확한 답변을 못 찾아 글을 올려봅니다.
12번 암호문제구요.
2,3,4,5 테스트 케이스 다 통과했다는데 1번 테스트케이스에서 런타임에러가 나옵니다.
다른 글에서 보니 1번은 문제에서 제시한 테스트케이스라는데 로컬에서는 정상 작동을 확인했습니다.
어떤 부분이 문제일까요? 런타임에러가 어떤 상황인지도 알고 싶습니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
님의 코드를 살펴보니 런타임 에러의 원인으로 추정되는 부분이 있습니다.
첫 번째, solution
메소드 내에서 str.length() / num
을 활용하여 암호문을 나누고 있는데, 이 부분에서 str.length()
가 num
으로 정확히 나누어 떨어지지 않을 경우에 배열 범위를 벗어날 수 있습니다. 예를 들어, str.length()
가 10이고 num
이 3이라면 10 / 3 = 3으로 계산되고 마지막에는 암호문이 1글자가 부족하게 됩니다.
두 번째로, binlist.set(binlist.indexOf(each), tmp.toString());
이 부분에서 수정하고자 하는 문자열들은 이미 for-each
루프에서 사용 중이기 때문에, 해당 문자열을 수정하는 과정에서 ConcurrentModificationException
이 발생할 수도 있습니다.
solution
메소드에서 binlist
에 대한 수정을 별도의 리스트에 담았다가 나중에 반영하거나, 다른 수정 방법을 고려해야 할 것 같습니다.
런타임 에러는 프로그램이 실행 중에 발생하는 오류를 의미합니다. 예를 들어 배열 범위를 넘어서 접근하려고 할 때나, 널 참조를 참조하려고 하는 등의 상황에서 발생할 수 있습니다.
로컬 환경에서 정상 작동하는 경우에도, 테스트 케이스에 따라 문제 상황이 발생할 수 있으므로 주의가 필요합니다.
정확한 원인을 파악하기 위해서는 문제의 테스트 케이스를 확인하는 것이 좋습니다. 에러 메시지를 확인하여 어떤 종류의 런타임 에러가 발생했는지 파악하고, 해당 상황을 재현해보세요.