22.4.25 [HackerRank]Java Anagrams

서태욱·2022년 4월 25일
0

Algorithm

목록 보기
15/45
post-thumbnail

✅ 문제 분석

두 문자열 a,b가 동일한 빈도로 동일한 문자를 포함하면 아나그램이라고 부른다. 이 챌린지에서 대소문자 구분은 없다. 예를 들어 CAT의 아나그램은 CAT, ACT, tac, TCA, aTC, CtA이다.

string a,b라는 파라미터가 첫번째, 두번째 string이며
a,b가 대소문자를 구분하지 않는 아나그램이면 true를 반환하고 아니면 false.

예시로 아래와 같이 anagram margana라는 두 string이 입력된다면
Anagrams가 프린트된다.

🌱 배경지식

char 문자형

한 개의 문자 값에 대한 자료형은 char 를 이용한다. char 자료형은 다음과 같이 사용한다.
이때 문자값은 '(단일 인용부호)로 감싸주어야 한다.

char a1 = 'a';

String 문자열을 char 배열로 변환

toCharArray()

import java.util.Arrays;

public class StringToCharArray {
	public static void main(String[] args) {
		String str = "How are you";
  
  		// 문자열 -> char 배열로 변환
 		char[] charArr = str.toCharArray();
        
 		// char 배열 출력
  		System.out.println(Arrays.toString(charArr));
   }
 } 
 
결과: [H, o, w, , a, r, e, , y, o, u]

str.toCharArray();

java.lang.String 클래스의 toCharArray() 메소드는 주어진 문자열을 char 배열 형태로 리턴한다.

Arrays.toString(charArr);

char 배열로 변환된 값을, 배열을 다시 문자열로 변환하여 출력하는
Arrays.toString() 메소드를 호출하여 출력한다.결과는 배열 형태로 출력된다.

java.util.Arrays

java.util.Arrays 유틸리티 클래스를 사용하면 배열(Array)을 정렬, 복제하거나,
List로 변환 하는 등의 작업을 쉽게 처리할 수 있다.
그 중에서 sort() 메서드는 클래스 메서드(Class method / Static method)로써
Arrays 클래스의 인스턴스 생성없이 바로 사용할 수 있다.

  • 오름차순: 매개값으로 기본타입 배열, String 배열등을 지정해주면 자동으로 오름차순 정렬이 된다.
import java.util.Arrays;

public class Sort {
  public static void main(String[] args) {
    int arr[] = {4, 33, 24, 15, 17, 21};
    Arrays.sort(arr);

    for(int i : arr) {
      System.out.print("[" + i + "]");
    }
  }
}

// [4][15][17][21][24][33] 이 출력됨!
  • 내림차순: Collections 클래스의 reverseOrder() 함수를 사용한다.기본타입 배열을 내림차순으로 정렬하고 싶다면 기본타입 배열을 래퍼 클래스로 만들어 Comparator를 두번째 인자에 넣어주어야 역순 정렬이 된다.
import java.util.Arrays;

public class Sort {
  public static void main(String[] args) {
    int arr[] = {4, 33, 24, 15, 17, 21};
    Arrays.sort(arr, Collections.reverseOrder());

    for(int i : arr) {
      System.out.print("[" + i + "]");
    }
  }
}


// [33][24][21][17][15][4]이 출력됨!
  • String 배열 내림차순 정렬
import java.util.Arrays;

public class Sort {
  public static void main(String[] args) {
    String arr[] = {"apple", "melon", "peach", "banana", "orange"};
    Arrays.sort(arr);

    for(String i : arr) {
      System.out.print("[" + i + "]");
    }
  }
}

// [peach][orange][melon][banana][apple]이 출력됨!

✏️ 해설

import java.util.Scanner;

public class Solution {

    static boolean isAnagram(String a, String b) {
        // Complete the function
        String aa = a.toLowerCase(); 
        String bb = b.toLowerCase();
        // 대,소문자를 가리지 않으므로 전부 소문자로 변경해도 무방
        
        char[] aaa = aa.toCharArray();
        char[] bbb = bb.toCharArray();
        // string 문자열을 char 배열로 변환한다.
        
        java.util.Arrays.sort(aaa);
        java.util.Arrays.sort(bbb);
        
        return java.util.Arrays.equals(aaa,bbb);
        // sort로 정렬해 aaa, bbb 두 배열의 내용이 같은지 비교한다.
    }

    public static void main(String[] args) {
    
        Scanner scan = new Scanner(System.in);
        String a = scan.next();
        String b = scan.next();
        scan.close();
        boolean ret = isAnagram(a, b);
        System.out.println( (ret) ? "Anagrams" : "Not Anagrams" );
    }
}

👉 참고

profile
re:START

0개의 댓글