[99클럽 코테 스터디 31일차 TIL] 백준 1755번 숫자놀이

말하는 감자·2024년 11월 27일
0
post-thumbnail

99클럽 코테 스터디 30일차 TIL

💙 JAVA 비기너

📌 오늘의 학습 키워드

  • 힙(우선순위 큐) / 해시

📌 공부한 내용

📍 오늘의 문제

📍 작성 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.PriorityQueue;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        String[] wordArr = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
        PriorityQueue<String> wordHeap = new PriorityQueue<>();
        HashMap<String, Integer> wordHash = new HashMap<>();
		
		StringTokenizer st = new StringTokenizer(br.readLine());
		int M = Integer.parseInt(st.nextToken());
		int N = Integer.parseInt(st.nextToken());
		
		for(int i=M; i<=N; i++) {
			String word = "";
			int first = i / 10;
			int second = i % 10;
			
			if(first != 0) word += wordArr[first];
			word += wordArr[second];
			
			wordHash.put(word, i);
			wordHeap.add(word);
		}
		
		int count = 0;
		while(!wordHeap.isEmpty()) {
			String word = wordHeap.poll();
			bw.write(String.valueOf(wordHash.get(word)));
			count++;
			if(count == 10) {
				bw.write("\n");
				count = 0;
			} else {
				bw.write(" ");
			}
		}
		
		br.close();
		
		bw.flush();

        bw.close();
		
    }
}

📌 오늘의 회고

숫자를 영어로 치환하고 그걸 정렬한 다음 다시 숫자로 치환하라고?! 에라이~~🤬

가장 먼저 해야하는 일은 역시 최솟값 M과 최댓값 N까지의 숫자들을 구해야하는 것이다.
그래서 for문을 MN사이로 돌게 하였고 숫자는 10으로 나눈 몫을 first(첫번째 자리에 있으니깐), 10으로 나눈 후 발생하는 나머지값을 second(두번째 자리에 있으니깐)로 저장했다.
이것은 정수 M, N(1 ≤ M ≤ N ≤ 99)이라는 조건이 있어서 가능한 방법이다.
그래서 이 firstsecond를 인덱스에 맞춰 영어단어를 저장한 문자열배열 wordArr을 통해 각각 영어단어로 치환하고 문자열 word에 저장한다.

이 때 해시 wordHash에 치환한 문자열 word와 원래 숫자인 for문의 i를 저장해놔서 다시 문자열을 숫자로 치환하기 쉽도록 하고 minHeap인 wordHeapword를 넣어 사전순으로 정렬되도록 한다.

숫자들도 구했고 정렬도 완료했다면 이제 하나씩 출력할 차례다.
wordHeap에 있는 요소를 차례대로 탈탈 털어서 출력하는데 문자열이 아니라 다시 숫자로 출력해야하므로 wordHash를 통해 해당 문자열이 어떤 숫자인지 찾은 다음 출력해준다.
이 때, 한줄에 10개씩 출력되어야 하므로 count를 통해 한줄에 몇개의 정수가 출력되었는지 체크하고 10개가 되었다면 개행처리를 해줬다.

profile
나는 말하는 감자다

0개의 댓글