티스토리 뷰


1. Java 구현

 (1) 풀이 - 1 (성공) (수정 필요)

            
package Q1159;

import java.io.*;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

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));

        int n = Integer.parseInt(br.readLine());
        Map names = new TreeMap<>();
        for (int i = 0; i < n; i++) {
            char firstName = br.readLine().charAt(0);
            names.put(firstName, names.containsKey(firstName) ? names.get(firstName) + 1 : 1);
        }

        if(names.keySet().stream().filter(name -> names.get(name) >= 5).count() == 0) bw.write("PREDAJA");
        else names.keySet().stream().filter(name -> names.get(name) >= 5).forEach(name -> System.out.print(name));

        bw.close();
    }
}

 (1) 풀이 - 2 (성공) (최종)

            
package Q1159;

import java.io.*;

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));

        int n = Integer.parseInt(br.readLine());
        int[] counts = new int[('z' - 'a') + 1];
        for (int i = 0; i < n; i++)
            counts[br.readLine().charAt(0) - 'a']++;

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < counts.length; i++)
            if (counts[i] >= 5)
                sb.append((char) ('a' + i));

        bw.write(sb.toString().length() > 0 ? sb.toString() : "PREDAJA");
        bw.close();
    }
}


2. 코드설명

 농구경기는 푸는 것은 굉장히 쉽다. 그러나 이것을 굳이 포스팅하는 이유는 리팩토링 과정을 남기고 싶어서이다! 처음에는 TreeMap을 통해서 단어의 앞자리를 기록했다.

 TreeMap을 사용한 이유는 원소를 저장할 때마다 자동으로 정렬을 해주기 때문이었다. 5개 이상의 단어에 대해서는 정렬된 순서로 출력해야 하기 때문이다.

 그리고 각각의 원소를 확인하는 과정에서 너무나도 복잡하고 중복적인 코드가 존재하기 때문에 리팩토링이 필요했다. 그래서 두번째 방법으로 다시 풀었다.


 두번째 방법으로 풀면 첫번째 풀이의 단점인 각각의 원소를 확인하는 과정이 간결해졌다. 왜냐면 'a'는 0번째, 'z'는 25번째와 같이 순차적으로 들어가기 때문에 정렬도 필요없고

 원소 꺼내는 것도 간편했다.


3. Pain Point

 문제를 푸는 것도 중요하지만, 좀더 간결하고 빠른 속도를 더 고려해봐야겠다! 공부는 꾸준히 해야겠다!

 조만간 일본으로 여행을 갈려하는데, 외국에서 알고리즘 푸는 목표를 이루어야지!



공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함