Recent Posts
Link
250x250
오늘보다 더 나은 내일의 나에게_
자바 알고리즘 문제 풀이 HashMap_TreeSet Q02_ 아나그램(해쉬) 본문
ALGORITHM/inflearn_javaAlgorithm
자바 알고리즘 문제 풀이 HashMap_TreeSet Q02_ 아나그램(해쉬)
chan_96 2022. 4. 9. 13:25728x90
설명
Anagram이란 두 문자열이 알파벳의 나열 순서를 다르지만 그 구성이 일치하면 두 단어는 아나그램이라고 합니다.
예를 들면 AbaAeCe 와 baeeACA 는 알파벳을 나열 순서는 다르지만 그 구성을 살펴보면 A(2), a(1), b(1), C(1), e(2)로 알파벳과 그 개수가 모두 일치합니다. 즉 어느 한 단어를 재 배열하면 상대편 단어가 될 수 있는 것을 아나그램이라 합니다.
길이가 같은 두 개의 단어가 주어지면 두 단어가 아나그램인지 판별하는 프로그램을 작성하세요. 아나그램 판별시 대소문자가 구분됩니다.
입력
첫 줄에 첫 번째 단어가 입력되고, 두 번째 줄에 두 번째 단어가 입력됩니다.
단어의 길이는 100을 넘지 않습니다.
출력
두 단어가 아나그램이면 “YES"를 출력하고, 아니면 ”NO"를 출력합니다.
예시 입력1
예시 출력1AbaAeCe
baeeACAYES
예시 입력2
예시 출력2abaCC
CaaabNO
코드
내가 입력한 코드
더보기package HashMap_TreeSet; import java.util.HashMap; import java.util.Scanner; public class Q02 { public String solution(String arr1, String arr2){ String answer = "YES"; String temp = arr1+arr2; HashMap<Character,Integer> map = new HashMap<>(); for(char x :temp.toCharArray()){ map.put(x,map.getOrDefault(x, 0)+1); } for(char x :temp.toCharArray()){ if(map.get(x)%2!=0){ answer="NO"; } } return answer; } public static void main(String[] args) { Q02 T = new Q02(); Scanner kb = new Scanner(System.in); String str1 = kb.next(); String str2 = kb.next(); System.out.print(T.solution(str1,str2)); kb.close(); } }
해설 코드
더보기import java.util.*; class Main { public String solution(String s1, String s2){ String answer="YES"; HashMap<Character, Integer> map=new HashMap<>(); for(char x : s1.toCharArray()){ map.put(x, map.getOrDefault(x, 0)+1); } for(char x : s2.toCharArray()){ if(!map.containsKey(x) || map.get(x)==0) return "NO"; map.put(x, map.get(x)-1); } return answer; } public static void main(String[] args){ Main T = new Main(); Scanner kb = new Scanner(System.in); String a=kb.next(); String b=kb.next(); System.out.print(T.solution(a, b)); } }
풀이 및 정리
먼저 Anagram이란?
: 두 문자열이 알파벳의 나열 순서를 다르지만 그 구성이 일치하면 두 단어
주의사항!
- 길이가 같은 두 문자열이 주어진다.
- 대소문자 구분!
내가 풀이한 방법은 입력받은 문자열 두 개를 합치고 먼저 map에 알파벳별로 넣는다.
그리고 난 후 각각의 key값인 알파벳의 value값을 2로 나눈 나머지가 0이 아니면 NO를 반환하고 나머지가 0이면 YES를 출력한다. 두 개의 문자열이 같다면 value값을 더하고 2로 나눈 나머지는 무조건 0이 나올 수밖에 없다.
해설코드를 정리해보면 먼저 문자열 한개를 map에 넣는다. 두번째 문자열을 map과 비교한다. 두번째 문자열의 각 인덱스 알파벳이 map에 key로 존재하지않거나 key값이 0이면 NO를 반환한다.
728x90
'ALGORITHM > inflearn_javaAlgorithm' 카테고리의 다른 글
자바 알고리즘 문제 풀이 HashMap_TreeSet Q01_ 학급 회장 (0) | 2022.04.08 |
---|---|
자바 알고리즘 문제 풀이 Two pointers, Sliding window Q06_ 최대 길이 연속부분수열 (0) | 2022.04.08 |
자바 알고리즘 문제 풀이 Two pointers, Sliding window Q05_ 연속된 자연수의 합 (0) | 2022.04.06 |
자바 알고리즘 문제 풀이 Two pointers, Sliding window Q04_ 연속 부분수열 (0) | 2022.03.30 |
자바 알고리즘 문제 풀이 Two pointers, Sliding window Q03_ 최대 매출 (0) | 2022.03.29 |
Comments