728x90
반응형
문제 설명
1. 배열에 id, 닉네임, 상태가 주어진다. 상태는 Enter, Leaver, Change이다.
2. Change를 사용하면 그 id를 사용하는 사람의 닉네임이 바뀐다.
3. 사람이 들어오고 나가는 결과를 바뀐 최종 닉네임에 따라 return 하면 된다.
풀이 과정
1. HashMap과 ArrayList를 통해 간단히 구현할 수 있다.
2. 해쉬맵에는 그 사람의 id를 키값, 닉네임을 value값으로 한다. 이렇게 하면 id의 value가 바뀔 때 마다 변경 하능하다.
3. ArrayList에는 그 사람의 id와 출입내역을 저장한다. 그러면 그 id의 사람이 나가거나 들어온 것들을 저장 가능하다.
4. 그럼 상태에 따라 변경하면 된다.
1) 입장한 경우 - HashMap에 id와 닉네임을 넣어준다. 왜냐면 처음에 들어와야 변경하든 나가든 할 수 있으니까.
이후 arraylist에 class로 두 값을 (id, 님이 들어왔습니다.) 이렇게 넣어준다.
2) 나간 경우 - HashMap은 변경할 필요가 없다. 새로운 사람이 나간것도 아니고 닉네임이 변경된것도 아니니까.
ArrayList에 class로 두 값을 (id, 님이 나갔습니다.) 이렇게 넣어준다.
3) 닉네임 변경 - HashMap에 그 아이가 변경되었다는 것을 알려주면 된다.
워낙 간단한 문제라 따로 설명할 내용은 없을 듯 하다
코드
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.*; | |
class Solution { | |
public static int toInt(String input){ | |
int intNum; | |
switch(input){ | |
case "Enter" : intNum = 1; break; | |
case "Leave" : intNum = 2; break; | |
case "Change": intNum = 3; break; | |
default : intNum = 0; | |
} | |
return intNum; | |
} | |
public String[] solution(String[] record) { | |
ArrayList<info> inOut = new ArrayList<>(); | |
HashMap<String, String> nickName = new HashMap<>(); | |
String data[][] = new String[record.length][3]; | |
for(int i=0; i<record. length; i++){ | |
for(int j=0; j<3; j++){ | |
data[i] = record[i].split(" "); | |
} | |
} | |
for(int i=0; i<record.length; i++){ | |
int status = toInt(data[i][0]); | |
if(status==3){ | |
nickName.put(data[i][1], data[i][2]); | |
}else if(status==1){ | |
nickName.put(data[i][1], data[i][2]); | |
inOut.add(new info(data[i][1], "님이 들어왔습니다.")); | |
}else{ | |
inOut.add(new info(data[i][1], "님이 나갔습니다.")); | |
} | |
} | |
String[] answer = new String[inOut.size()]; | |
for(int i=0; i<inOut.size(); i++){ | |
info info = inOut.get(i); | |
String nick = nickName.get(info.id); | |
answer[i] = nick + info.status; | |
} | |
return answer; | |
} | |
} | |
class info{ | |
String id; | |
String status; | |
info(String id, String status){ | |
this.id = id; | |
this.status = status; | |
} | |
} |
반응형
'알고리즘 공부' 카테고리의 다른 글
[프로그래머스] 최솟값 만들기- java (0) | 2021.10.29 |
---|---|
[프로그래머스] 더 맵게- java (0) | 2021.10.27 |
[백준 11559번] Puyo Puyo - java (1) | 2021.10.17 |
[백준 12100번] 2048(easy) - java (0) | 2021.10.16 |
[백준 1100번] 하얀 칸 - java (0) | 2021.10.05 |