본문 바로가기

Algorithm (Java)/인프런 알고리즘강의

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

문제

코드

package prep.test.coding;

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

public class Anagram {
	public String solution(String str1, String str2) {
		HashMap<Character, Integer> map  = new HashMap<>();
		
		for(char idx : str1.toCharArray()) {
			map.put(idx, map.getOrDefault(idx,0)+1);			
		}		
		for(char idx : str2.toCharArray()) {
			// 만약 str2에 있는 문자가 map의 key 중에 없거나
			// 해당 key의 value가 0이면 
			if(!map.containsKey(idx) || map.get(idx)==0 ) {
				return "NO";
			}
			map.put(idx, map.getOrDefault(idx, 0) -1);				
		}
		return "YES";
		
	}

	public static void main(String[] args) {
		Anagram T = new Anagram();
		Scanner kb = new Scanner(System.in);
		String str1 = kb.next();
		String str2= kb.next();
		System.out.println(T.solution(str1, str2));
	}
	
}

 

로직: 

- str1과 str2이 아나그램이라면,

- str1을 구성하는 문자를 key, 각 문자의 갯수를 value로 하는 map을 만든 후 

- str2 -> .toCharArray를 통해 char[] 배열로 만든 후, 해당 배열을 돌면서 map에서 일치하는 문자를 만날 때마다 갯수를 -1씩 줄여나갈 수 있어야함

- 만약 map에 해당 key가 존재하지 않거나, 해당 key로 검색되는 value의 값이 0이라면 아나그램이 아니므로 바로 return

- str2배열을 끝까지 돌때까지 위 조건에 걸리지 않는다면, 아나그램이므로 "YES" return

 

 

학습내용

HashMap 메소드

 - getOrDefault

 - containsKey(키명): hashmap의 key 중 해당 key가 있는지 확인 (boolean반환)

 - put(key, value) 

 

 

출처

https://www.inflearn.com/course/%EC%9E%90%EB%B0%94-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-%EC%BD%94%ED%85%8C%EB%8C%80%EB%B9%84

 

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

자바(Java)로 코딩테스트를 준비하시는 분을 위한 강좌입니다. 코딩테스트에서 가장 많이 출제되는 Top 10 Topic을 다루고 있습니다. 주제와 연동하여 기초문제부터 중급문제까지 단계적으로 구성

www.inflearn.com