알고리즘 문제풀이/백준

#6996 : 애너그램

모항 2022. 1. 21. 01:32

풀이방법

사용된 것:

ArrayList

 

2022.01.21

두 단어의 글자 수가 같은지 확인한다. 단어 수가 다르면 애너그램이 아닌 것으로 판단한다.

문자들의 아스키코드의 합이 같은지 확인한다. 이 값이 다르면 애너그램이 아닌 것으로 판단한다.

 

글자 수도 같고 아스키코드의 합도 같다면 다음의 방법으로 애너그램 여부를 판단한다.

  • 0) int 타입 변수 check의 초기값은 0이다.
  • 1) 첫번째 문자열의 문자들을 ArrayList<Character>list1에 저장한다.
  • 2) list1의 첫번째 글자(인덱스 0)가 두번째 문자열에 포함되어 있으면 check의 값을 1 증가시킨다. 그리고 한 단어에 여러 번 등장하는 글자로 인한 오류를 없애기 위해 list1의 첫번째 글자를 remove한다.
  • 3) 2번의 과정을 문자열의 길이만큼 반복한 뒤에 check의 값이 문자열의 길이와 동일하다면 애너그램이 맞다.

 

코드

Java(2022.01.21)

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Scanner sc= new Scanner(System.in);
		
		int cnt = sc.nextInt();
		String str1, str2;
		int n1, n2;	//아스키코드값 비교에 사용
		int check;	//애너그램 여부 확인에 사용		
		
		for(int i = 0; i<cnt; i++) {
			str1 = sc.next();
			str2 = sc.next();
			n1 = 0; n2 = 0;
			//글자 수가 다르면 두 문자열이 애너그램일 수 없으므로 NOT 문장 출력 후 다음 케이스로.
			if(str1.length() != str2.length()) {
				System.out.println(str1 + " & " + str2 + " are NOT anagrams."); continue;
			}
			//각 문자열에 속한 문자들의 아스키코드의 합 구하기
			for(int j = 0; j<str1.length(); j++) {
				n1 += (int)str1.charAt(j);
				n2 += (int)str2.charAt(j);
			}
			//아스키코드값의 합이 다르면 두 문자열이 애너그램일 수 없으므로 NOT 문장 출력 후 다음 케이스로.
			if(n1 != n2) {
				System.out.println(str1 + " & " + str2 + " are NOT anagrams."); continue;
			}
			//글자수와 아스키코드값의 합이 모두 같은 경우
			ArrayList<Character> list1 = new ArrayList<Character>();
			for(int j = 0; j<str1.length(); j++) {
				list1.add(str1.charAt(j));
			}
			check = 0;
			for(int j = 0; j<str1.length(); j++) {
				for(int k = 0; k<str2.length();k++) {
					if(list1.get(0) == str2.charAt(k)) {
						list1.remove(0); check++; break;
					}
				}
			}
			
			if(check == str1.length()) System.out.println(str1 + " & " +  str2 + " are anagrams.");
			else System.out.println(str1 + " & " +  str2 + " are NOT anagrams.");
		}

		sc.close();
        
	}

}

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

#1764 : 듣보잡  (0) 2022.01.21
#11091 : 알파벳 전부 쓰기  (0) 2022.01.21
#4583 : 거울상  (0) 2022.01.19
#15904 : UCPC는 무엇의 약자일까?  (0) 2022.01.19
#1026 : 보물  (0) 2022.01.14