알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.

 

Problem📄

 

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

 

프로그래머스

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

programmers.co.kr


Think🤔

 

Enter 채팅방 입장

Leave 채팅방 퇴장

Change 채팅방 변경

 

각각 함수 따로 생성

 

아이디는 중복 X , 닉네임은 중복 가능

 

import java.util.HashMap;

class Solution {
    public String[] solution(String[] record) {
        
        HashMap<String, String> id = new HashMap();
        int count = 0; // 출력 카운트 몇인지
        
        for(String str : record){
            String[] info = str.split(" ");
            String behavior = info[0];
            if(behavior.equals("Enter")){
                count++;
            }else if(behavior.equals("Leave")){
                count++;
                continue;
            }
            id.put(info[1],info[2]); // uid1234 , Muzi
        }
        
        String[] answer = new String [count];
        int answerCnt = 0;
        
        for(int i=0; i<answer.length; i++){
            String[] str = record[i].split(" ");
        
            String behavior = str[0];
            String nickName = str[1];
            
            if(behavior.equals("Enter")){
                answer[answerCnt] = id.get(nickName) + "님이 들어왔습니다.";
            }else if(behavior.equals("Leave")){
                answer[answerCnt] = id.get(nickName) + "님이 나갔습니다.";
            }
            answerCnt++;
        }
        
        return answer;
    }
}

// 반복문 record 돔
// hashmap 아이디랑 닉네임
// change면 hashMap value 변경 
// 다 돌고 다시 for문 돌려서
// 아이디에 맞는 value값 글자 보여주면서 들어왔습니다 , 나갔습니다 보여줌
// 변경은 안보임

 

샘플 테스트만 통과하고 다틀림...

 

왜 틀렸는지 궁금했는데 똑같은 코드도 있는데 통과하지 못함

 

 


Solution✍

 

import java.util.HashMap;

class Solution {
    public String[] solution(String[] record) {
        
        HashMap<String, String> id = new HashMap();
        int count = 0; // 출력 카운트 몇인지
        
        for(String str : record){
            String[] info = str.split(" ");
            String behavior = info[0];
            
            if(behavior.equals("Enter")){
                count++;
            }else if(behavior.equals("Leave")){
                count++;
                continue;
            }
            id.put(info[1],info[2]); // uid1234 , Muzi
        }
        
        String[] answer = new String [count];
        
        int answerCnt = 0;
        for(int i=0; i<record.length; i++){ ///////////// 이곳 answer이 아님
            String[] info = record[i].split(" ");
        
            String behavior = info[0];
            String nickName = id.get(info[1]);
            
            if(behavior.equals("Enter")){
                answer[answerCnt++] = nickName + "님이 들어왔습니다.";
            }else if(behavior.equals("Leave")){
                answer[answerCnt++] = nickName + "님이 나갔습니다.";
            }
        }
        
        return answer;
    }
}

 

answer이 아닌 부분 record를 바꿔줬는데 반례를 생각해 보면

 

들어왔고 , 변경했고 , 나갔으면 

들어옴 1

변경 0

나감 1

 

이여서 총 2의 길이를 가짐

 

근데 마지막 나감도 찍어줘야 되기 때문에 모든 record를 검사해야 됨...


Review🤩

 

이상한 곳에서 헤맸다..


 

+ Recent posts