학급회장/아나그램

-·2023년 12월 24일

Inflearn-basicTest

목록 보기
16/27

학급회장

🗒️hashMap.getOrDefault(key, default);

키 값이 없는 경우 설정해준 default 값을 반환한다.

🗒️hashMap.containsKey(key);

키 값의 여부에 따라 true / false를 반환한다.

🗒️hashMap.size();

key의 개수를 반환한다.

✏️ 문제

* 설명
학급 회장을 뽑는데 후보로 기호 A, B, C, D, E 후보가 등록을 했습니다.
투표용지에는 반 학생들이 자기가 선택한 후보의 기호(알파벳)가 쓰여져 있으며 
선생님은 그 기호를 발표하고 있습니다.
선생님의 발표가 끝난 후 어떤 기호의 후보가 학급 회장이 되었는지 출력하는 프로그램을 
작성하세요.
반드시 한 명의 학급회장이 선출되도록 투표결과가 나왔다고 가정합니다.

* 입력
첫 줄에는 반 학생수 N(5<=N<=50)이 주어집니다.
두 번째 줄에 N개의 투표용지에 쓰여져 있던 각 후보의 기호가 선생님이 발표한 순서대로
문자열로 입력됩니다.

* 출력
학급 회장으로 선택된 기호를 출력합니다.

🔍풀이

put(key)를 이용해 후보에 투표 결과를 더해준 뒤, keySet과 for each를 이용하여 max값을 찾는다.

public char solution(int n, String str){
	char answer='';
    HashMap<Character, Integer> hsMap = new HashMap();
    for(char x : str.toCharArray()){
    	hsMap.put(x, hsMap.getOrDefault(x, 0)+1);
    }
    int max = 0;
    for(char key : hsMap.keySet()){
    	if(hsMap.get(key)>max){
			max=hsMap.get(key);
            answer=key;
        }
    }
    return answer;
}

아나그램

✏️ 문제

* 설명
Anagram이란 두 문자열이 알파벳의 나열 순서를 다르지만 그 구성이 일치하면 두 단어는
아나그램이라고 합니다.
예를 들면 AbaAeCe 와 baeeACA 는 알파벳을 나열 순서는 다르지만 그 구성을 살펴보면 
A(2), a(1), b(1), C(1), e(2)로
알파벳과 그 개수가 모두 일치합니다. 즉 어느 한 단어를 재 배열하면 상대편 단어가 될 수 
있는 것을 아나그램이라 합니다.
길이가 같은 두 개의 단어가 주어지면 두 단어가 아나그램인지 판별하는 프로그램을 작성하세요.
아나그램 판별시 대소문자가 구분됩니다.

* 입력
첫 줄에 첫 번째 단어가 입력되고, 두 번째 줄에 두 번째 단어가 입력됩니다.
단어의 길이는 100을 넘지 않습니다.

* 출력
두 단어가 아나그램이면 “YES"를 출력하고, 아니면 ”NO"를 출력합니다.

🔍풀이

hashmap을 만들어 첫 번째 문자열을 key값으로 넣어준 뒤, for each를 이용하여 값을 빼 0을 만들어준다. 이 때 존재하지 않는 key값이나, 0이하로 떨어지면 "NO"를 return한다.

public String solution(String s1, String s2) {
    String answer = "YES";

    HashMap<Character, Integer> map = new HashMap();
    for(char x : s1.toCharArray()){
    	map.put(x, hsMap.getOrDefault(x, 0)+1);
    }
    for(char x : s2.toCharArray()){
    	if(!map.containsKey(x) || map.getKey(x) == 0) return "NO";
        map.put(x, map.getKey(x)-1);
    }
    return answer;
}
profile
신입 개발자의 개인 공부 공간입니다

0개의 댓글