문제
https://programmers.co.kr/learn/courses/30/lessons/42888
풀이
간단한 구현 문제였다. 파이썬에선 defaultdict, 자바에선 HashMap 자료구조를 이용해서 풀 수 있었다. 다만, "Leave"의 경우엔 "Enter"나 "Change"와 달리 split한 배열의 길이가 2가 되므로 이에 주의해야 한다.
코드
파이썬
from collections import defaultdict
def solution(record):
answer = []
user_dict = defaultdict(str)
for string in record:
splitted_string = string.split(' ')
action, user_id = splitted_string[0], splitted_string[1]
if action == 'Enter' or action == 'Change':
user_name = splitted_string[2]
user_dict[user_id] = user_name
for string in record:
splitted_string = string.split(' ')
action, user_id = splitted_string[0], splitted_string[1]
user_name = user_dict[user_id]
if action == 'Enter' or action == 'Leave':
answer.append(getFormattedString(action, user_name))
return answer
def getFormattedString(action, user_name):
if action == 'Enter':
return f"{user_name}님이 들어왔습니다."
if action == 'Leave':
return f"{user_name}님이 나갔습니다."
solution(["Enter uid1234 Muzi", "Enter uid4567 Prodo","Leave uid1234","Enter uid1234 Prodo","Change uid4567 Ryan"])
자바
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
class Solution {
public String[] solution(String[] record) {
List<String> answerList = new ArrayList<>();
HashMap<String, String> userMap = new HashMap<>();
for (String str : record) {
String[] splittedStr = str.split(" ");
String action = splittedStr[0];
String userId = splittedStr[1];
if (action.equals("Enter") || action.equals("Change")) {
String userName = splittedStr[2];
userMap.put(userId, userName);
}
}
for (String str : record) {
String[] splittedStr = str.split(" ");
String action = splittedStr[0];
String userId = splittedStr[1];
if (action.equals("Enter") || action.equals("Leave")) {
answerList.add(getFormattedStr(action, userMap.get(userId)));
}
}
String[] answer = answerList.toArray(new String[answerList.size()]);
return answer;
}
private String getFormattedStr(String action, String userName) {
StringBuilder sb = new StringBuilder(userName);
if (action.equals("Enter")) {
return sb.append("님이 들어왔습니다.").toString();
}
return sb.append("님이 나갔습니다.").toString();
}
}
'CS > 알고리즘 문제 풀이' 카테고리의 다른 글
[프로그래머스] 전력망을 둘로 나누기 [Python(파이썬), Java(자바)] (1) | 2021.10.21 |
---|---|
[프로그래머스] 다단계 칫솔 판매 [Python(파이썬)] (0) | 2021.10.05 |
[프로그래머스] 로또의 최고 순위와 최저 순위 [Python(파이썬), Java(자바)] (0) | 2021.09.14 |
[백준] 1939 - 중량제한 [Python(파이썬)] (0) | 2021.07.19 |
[백준] 3020 - 개똥벌레 [Python(파이썬)] (0) | 2021.07.19 |