알고리즘

백준 1157 (Java)

Codult 2023. 11. 27. 15:02
728x90

1) 입력받은 문자열을 대문자 형태로 바꾼 뒤, char[]으로 변환하여 저장한다.

2) key값으로 'A'~'Z', 초기 value 값으로 0을 갖는 HashMap을 선언한다.

3) for문을 이용하여, char[] 배열의 character가 HashMap의 key와 일치하는 경우 해당 value에 +1을 해준다.

4) value값에 따라 오름차순 정렬하여, 1, 2번째 value가 같으면 ? 출력, 아니라면 1번째 key를 출력한다.

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        char[] word = sc.next().toUpperCase().toCharArray();
        HashMap<Character, Integer> map = new HashMap<>();
        for (char i='A'; i<='Z'; i++) map.put(i, 0);
        for (int i=0; i<word.length; i++){
            for (char j='A'; j<='Z'; j++){
                if (word[i]==j){
                   map.put(j, map.get(j)+1);
                }
            }
        }
        List<Character> ordered = new ArrayList<>(map.keySet());
        ordered.sort(((o1, o2) -> map.get(o2).compareTo(map.get(o1))));
        if (map.get(ordered.get(0)).equals(map.get(ordered.get(1)))) System.out.println("?");
        else System.out.println(ordered.get(0));
        sc.close();
    }
}

 

아래와 같이 입력받은 문자열을 배열로 만들어 반복문을 돌는 경우, 예제는 확인이 잘 되지만, 시간초과 오류가 발생한다.이는, 1,000,000 길이의 문자가 들어왔을 때 이중 for문에서 시간초과 발생하는 것이다.

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String word = sc.next().toUpperCase();
        char[] wordArr = word.toCharArray();
        HashMap<Character, Integer> countedMap = new HashMap<>();
        for (int i=0; i<wordArr.length; i++){
            int count = 0;
            for (int j=0; j<wordArr.length; j++){
                if (wordArr[i] == wordArr[j]) count++;
            }
            countedMap.put(wordArr[i], count);
        }
        List<Character> keySet = new ArrayList<>(countedMap.keySet());
        keySet.sort(((o1, o2) -> countedMap.get(o2).compareTo(countedMap.get(o1))));

        if (countedMap.get(keySet.get(0))==countedMap.get(keySet.get(1))){
            System.out.println("?");
        } else {
            System.out.println(keySet.get(0));
        }
        sc.close();
    }
}

 

728x90

'알고리즘' 카테고리의 다른 글

백준 1193 (Java)  (0) 2023.12.03
백준 2564 (Java)  (1) 2023.11.28
백준 25206 (Java)  (1) 2023.11.28
백준 1316 (Java)  (0) 2023.11.27
백준 2941 (Java)  (1) 2023.11.27