Skip to content

Latest commit

 

History

History
108 lines (91 loc) · 3.03 KB

2021-12-19.md

File metadata and controls

108 lines (91 loc) · 3.03 KB

완주하지 못한 선수

링크

소스코드

import java.util.*;
class Solution {
    public String solution(String[] participant, String[] completion) {
        Arrays.sort(participant);
        Arrays.sort(completion);
        
        int len = participant.length;
        int j = 0;
        int max = len - 1;
        for (String s : participant) {
            if (j == max) {
                return s;
            }
            if (!s.equals(completion[j++])) {
                return s;
            }
        }
               
        return "";
    }
}

풀이

예전에 풀었던 문제여서 따로 다시 풀진 않았습니다.
이런 문제는 그냥 간단하게 푸는 것도 괜찮다고 생각합니다.

오픈채팅방

링크

소스코드

import java.util.*;
class Solution {
    public String[] solution(String[] record) {
        Room room = new Room(record);
        return room.getLogs();
    }

    static class Room {
        Queue<Info> infoLogs = new LinkedList<>();
        Map<String, String> names = new HashMap<>();
        Room(String[] record) {
            for (String row : record) {
                String[] strings = row.split(" ");
                if("Leave".equals(strings[0])) {
                    infoLogs.add(new Leave(strings[1]));
                }
                if ("Enter".equals(strings[0])) {
                    infoLogs.add(new Enter(strings[1]));
                    names.put(strings[1], strings[2]);
                }
                if ("Change".equals(strings[0])){
                    names.put(strings[1], strings[2]);
                }
            }
        }

        public String[] getLogs() {
            return infoLogs.stream()
                .map(info -> info.print(names))
                .toArray(String[]::new);
        }
    }

    static class Enter implements Info {
        private final String id;

        Enter(String id) {
            this.id = id;
        }
        public String print(Map<String, String> names) {
            return names.get(id) + "님이 들어왔습니다.";
        }
    }

    static class Leave implements Info {
        private final String id;

        Leave(String id) {
            this.id = id;
        }

        public String print(Map<String, String> names) {
            return names.get(id) + "님이 나갔습니다.";
        }
    }
}

interface Info {
    String print(Map<String, String> nameStorage);
}

풀이

  1. Enter 와 Leave 를 객체로 만들어 Queue 에 저장해서 그대로 출력만 해주면 될 것이라고 생각함
  2. id 와 이름을 key-value 저장소에 저장하여 관리하면 될 것이라고 생각하여 hashmap 사용
  3. 저장해 둔 그대로 출력
  4. 문자열을 객체로 만드는 과정을 조금 더 리팩토링 하고 싶지만 좋은 아이디어가 생각나지 않아 보류함..