[알고리즘] 인프런 - 아나그램

정은아·2024년 1월 8일
post-thumbnail

인프런 - 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

- Section 4 - 아나그램 문제

내 풀이(런타임에러)

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

public class HashMap_02 {
	public static void main(String[] args) {
		
		// 길이가 같은 두 문자열이 같은 구성인지 판단하는 문제
		
		// 1. 테스트케이스 String을 2개 받는다.
		// 2. 답을 출력할 변수 String을 만든다.
		// 3. hashmap을 만든다.
		// 4. forEach문을 돌려 key, value값을 넣는다. 문자 하나당 1씩 추가한다.
		// 5. 다시 forEach문을 돌려서 이번에는 문자 하나당 1씩 빼준다.
		// 6. if문을 돌려 0이 아니거나 밸류값을 갖고 있다면 No, 아니면 yes를 출력한다.
		
		Scanner sc = new Scanner(System.in);
		
		String str = sc.next();
		String str2 = sc.next();
		String answer = "YES";
		
		HashMap<Character, Integer> map = new HashMap<>();
		
		for (char ch : str2.toCharArray()) {
			map.put(ch, map.getOrDefault(ch, 0)+1);
		}
		
		for (char ch : str.toCharArray()) {
			if (!map.containsKey(ch) || map.get(ch) == 0) {
				answer = "NO";
			}
			
			map.put(ch, map.get(ch)-1);
		}

		System.out.println(answer);
	}
}

다시 풀기

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

public class HashMap_02 {
	public static void main(String[] args) {

		// 길이가 같은 두 문자열이 같은 구성인지 판단하는 문제

		// 1. 테스트케이스 String을 2개 받는다.
		// 2. 답을 출력할 변수 String을 만든다.
		// 3. hashmap을 만든다.
		// 4. forEach문을 돌려 key, value값을 넣는다. 문자 하나당 1씩 추가한다.
		// 5. 다시 forEach문을 돌려서 이번에는 문자 하나당 1씩 빼준다.
		// 6. if문을 돌려 0이 아니거나 밸류값을 갖고 있다면 No, 아니면 yes를 출력한다.

		Scanner sc = new Scanner(System.in);

		String str = sc.next();
		String str2 = sc.next();
		String answer = "YES";

		HashMap<Character, Integer> map = new HashMap<>();

		for (char ch : str.toCharArray()) {
			map.put(ch, map.getOrDefault(ch, 0) + 1);
		}

		for (char ch : str2.toCharArray()) {
			if (!map.containsKey(ch) || map.get(ch) == 0) {
				answer = "NO";
				break;
			}

			map.put(ch, map.get(ch) - 1);
		}

		System.out.println(answer);
	}
}

chat-GPT가 풀어주기

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

public class HashMap_02 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        String str = sc.next();
        String str2 = sc.next();
        String answer = "YES";

        if (str.length() != str2.length()) {
            answer = "NO";
        } else {
            HashMap<Character, Integer> map = new HashMap<>();

            for (char ch : str.toCharArray()) {
                map.put(ch, map.getOrDefault(ch, 0) + 1);
            }

            for (char ch : str2.toCharArray()) {
                if (!map.containsKey(ch) || map.get(ch) == 0) {
                    answer = "NO";
                    break; // Terminate the loop early if there's a mismatch
                }
                map.put(ch, map.get(ch) - 1);
            }

            // Check if any characters remain unmatched in str2
            for (int value : map.values()) {
                if (value != 0) {
                    answer = "NO";
                    break;
                }
            }
        }

        System.out.println(answer);
    }
}

느낀점

break;을 안해줘서 틀린걸 계속 붙잡고 있었다니 너무 분하다..
GPT한테 물어본 첫 문제인데, 웃긴게 GPT가 풀어준 답도 틀렸다. 왜지??

profile
꾸준함의 가치를 믿는 개발자

0개의 댓글