https://school.programmers.co.kr/learn/courses/30/lessons/42888

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

푸는데 30분걸렸습니다.

 

해쉬맵을 적절하게 사용하여 훨씬 빠르게 푼 것 같습니다.

 

import java.util.*;
import java.io.*;
import java.util.Map.*;
class Solution {
    public static ArrayList<User> userArr = new ArrayList<User>();
    // public String[] solution(String[] record) {
    public String[] solution(String[] record) {
        
        HashMap<String, String> hashmap = new HashMap<String, String>();
        for(int i=0;i<record.length;i++){
            String[] recordTemp = record[i].split(" ");        
            if(recordTemp[0].equals("Enter")){
                userArr.add(new User(recordTemp[1], recordTemp[2], true));
                hashmap.put(recordTemp[1], recordTemp[2]);
            }else if(recordTemp[0].equals("Leave")){
                userArr.add(new User(recordTemp[1], hashmap.get(recordTemp[1]) ,false));
            }
            else if(recordTemp[0].equals("Change")){
                hashmap.put(recordTemp[1], recordTemp[2]);
            }
        }
        
        // for(Entry <String, String> entry : hashmap.entrySet()){
        //     System.out.println(" "+entry.getKey() + entry.getValue());
        // }
        
        String[] answer = {""};
        answer = new String[userArr.size()];
        for(int i=0;i<answer.length;i++){
            answer[i] = "";
            // System.out.println(userArr.get(i).uid+" "+userArr.get(i).nickname +" "+userArr.get(i).ifentertrue_ifoutfalse);
        }
        
        for(int i=0;i<userArr.size();i++){
            User temp=  userArr.get(i);
            if(temp.nickname.equals(hashmap.get(temp.uid))){
                  // continue;      
            }else{
                temp.nickname = hashmap.get(temp.uid);
            }
            
            if(temp.ifentertrue_ifoutfalse == true){
                answer[i] += temp.nickname +"님이 들어왔습니다.";    
                
            }else if(temp.ifentertrue_ifoutfalse == false){
                answer[i] += temp.nickname +"님이 나갔습니다.";
            }
            
        }
        
        
        
        
        
        
        // String[] answer = {};
        return answer;
    }
}

class User{
    String uid;
    String nickname;
    boolean ifentertrue_ifoutfalse = false;
    public User(){
        
    }
    public User(String uid, boolean ifentertrue_ifoutfalse){
        this.uid = uid;
        this.ifentertrue_ifoutfalse = ifentertrue_ifoutfalse; 
    }
    public User(String uid, String nickname, boolean ifentertrue_ifoutfalse){
        this.uid = uid;
        this.nickname = nickname;
        this.ifentertrue_ifoutfalse = ifentertrue_ifoutfalse; 
    }
}

 

 

처음에 별생각없이 for문을 돌렸다가 시간초과가 났었습니다.

HashMap으로 풀어 시간초과를 없앴습니다.

 

기억해야할점들

첫번째, 문제를 잘이해해야합니다.

Change 뿐만 아니라 Enter로 들어갔을떄 userid가 같고 이름이 다르면 그떄도 change와 같은 변화가 일어납니다.

 

두번째, 마지막에 들어간 이름이 결국 해당값의 이름입니다.

마지막에 들어간 이름이 해당값의 이름으로 hashmap으로 userid를 키로하여 계속해서 갱신시켜줍니다.

 

import java.util.*;
class Solution {
    ArrayList<Node> arr = new ArrayList<>();
    HashMap<String, String> hashmap = new HashMap<String, String>();
    public String[] solution(String[] record) {
        for(int i=0;i<record.length;i++){
            String[] temp = record[i].split(" ");
            String cmd = temp[0];
            String userid = temp[1];
            String name="";
            
            if(cmd.equals("Enter")){
                name = temp[2];
                arr.add(new Node(cmd, userid));
                hashmap.put(userid, name);
            }else if(cmd.equals("Leave")){
                arr.add(new Node(cmd, userid));
            }else if(cmd.equals("Change")){
                name = temp[2];
                hashmap.put(userid, name);
            }
        }
        
        String[] answer = new String[arr.size()];
        for(int i=0;i<arr.size();i++){
            if(arr.get(i).cmd.equals("Enter")){
               answer[i] = hashmap.get(arr.get(i).userid)+"님이 들어왔습니다.";
            }else if(arr.get(i).cmd.equals("Leave")){
               answer[i] = hashmap.get(arr.get(i).userid)+"님이 나갔습니다.";
            }
        }
        
        return answer;
    }
    
    class Node{
        String cmd;
        String userid;
        Node(String cmd, String userid){
            this.cmd = cmd;
            this.userid = userid;
        }
    }
}

+ Recent posts