• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

아나그램 문제 런타임에러

24.05.08 16:16 작성 조회수 53

0

안녕하세요 강사님. 해쉬맵 아나그램문제 런타임에러가 나서 채점이 되지않은데 왜 그런지 모르겠습니다..

 

import java.util.HashMap;
import java.util.Scanner;

public class Main {
  public String solution( String str1, String str2){
    String answer = "YES";
    HashMap<Character,Integer> str1map = new HashMap<>();

    //문자열을 순회하며 알파벳을 개수를 세기
    for(char key: str1.toCharArray()){
      str1map.put(key,str1map.getOrDefault(key,0)+1);
    }

    //문자열을 순회하며 map에서 count 하나씩 제거
    for(char key: str2.toCharArray()){
      //str1에 있는 문자열이 str2에는 없거나 갯수가 0인경우 아나그램이 아님
      if(!str1map.containsKey(key) || str1map.get(key) == 0) answer = "NO";
      str1map.put(key,str1map.get(key)-1);
    }
    
    return answer;
  }

  public static void main (String[]args){
    Main main = new Main();
    Scanner sc = new Scanner(System.in);
    String str1 =  sc.next();
    String str2 =  sc.next();
    System.out.print(main.solution(str1, str2));
  }
}


답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.05.08

안녕하세요, 인프런 AI 인턴입니다.

질문자님이 아나그램 문제에 대해 겪고 계신 런타임에러의 원인은 여러 다른 일반적인 이유 중 하나일 수 있습니다. 제공해주신 코드를 보면, 기본적인 구현 접근 방식은 올바르게 보입니다. HashMap을 사용하여 문자열의 문자들을 계산하고, 두 번째 문자열을 확인하면서 첫 번째 문자열과 비교합니다.

런타임 에러는 코드 실행 시 예외 상황이 발생했음을 의미하는데, 대표적인 원인으로는 배열 범위를 벗어나는 접근, null 참조, 입력 형식 불일치 등이 있습니다. 하지만 제공된 코드를 분석해보면, 이러한 일반적인 문제들은 잘 처리되어 있는 것으로 보입니다.

그럼에도 불구하고 런타임 에러가 발생하는 경우, 이는 특정 테스트 케이스나 입력 값에 대해 예외적으로 발생하는 문제일 수 있습니다. 예를 들어, 입력으로 받는 문자열의 길이가 극단적으로 클 경우나 특수 문자를 포함하는 경우 등이 있을 수 있습니다.

이와 유사한 예로, “왜 런타임 에러가 나는지 모르겠습니다.” 질문에서 사용자가 런타임 에러에 대해 문의했으며, 강의에서는 코드를 올려 달라는 답변이 있었습니다. 이 답변과 상황은 정확히 일치하지 않으나, 공통적으로 런타임 에러에 대한 해결 방법을 모색해야 함을 보여줍니다.

또한, 런타임에러 뜨는 이유좀 알수 있을까요 ?? 질문에서는 런타임 에러의 구체적 원인 중 하나로, 키가 HashMap에 존재하지 않는데 해당 키의 값을 빼려고 시도한 것을 들 수 있습니다. 이는 질문자님의 코드에서도 유념해야 할 중요한 점입니다.

사실, 질문자님이 제시한 코드 상에서는 str1map.get(key) == 0일 때 NO로 설정한 뒤 다시 str1map.put(key,str1map.get(key)-1)을 호출하는 부분에서 문제가 발생할 수 있습니다. 이미 0인 경우에는 해당 키의 값을 빼면 -1이 될 수 있어 로직상 오류의 여지가 있습니다. 이 경우에 break; 문을 추가하여 더 이상의 반복을 중단하도록 하는 것이 좋습니다.

위의 예시는 질문자님의 상황과 정확히 일치하지 않을 수 있으므로, 실제 문제 해결을 위한 단서로만 해석해 주세요. 런타임 에러의 정확한 원인을 파악하기 위해서는, 에러가 나타나는 특정 입력 값에 대한 정보나 실행 환경 등 추가적인 컨텍스트가 필요할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.