문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/42888


제한 사항

입출력 예

풀이
import java.util.HashMap;
class Solution {
public String[] solution(String[] record) {
StringBuilder result = new StringBuilder();
HashMap<String, String> idMap = new HashMap<>();
String[] answer;
for (int i = record.length - 1; i >= 0; i--) {
String[] split = record[i].split(" ");
if (split[0].equals("Leave")) result.append(record[i]).append("/");
else {
if (!idMap.containsKey(split[1])) idMap.put(split[1], split[2]);
if (split[0].equals("Enter"))
result.append(idMap.get(split[1])).append("님이 들어왔습니다.").append("/");
}
}
answer = result.toString().split("/");
for (int i = 0; i < answer.length / 2 + (answer.length % 2 == 0 ? 0 : 1); i++) {
String temp = answer[answer.length - (1 + i)];
if (temp.contains("Leave ")) {
temp = new StringBuilder()
.append(idMap.get(temp.split(" ")[1])).append("님이 나갔습니다.").toString();
}
if (answer[i].contains("Leave ")) {
answer[i] = new StringBuilder()
.append(idMap.get(answer[i].split(" ")[1])).append("님이 나갔습니다.").toString();
}
answer[answer.length - (1 + i)] = answer[i];
answer[i] = temp;
}
return answer;
}
}
후기
반례를 찾느라 시간이 좀 걸렸다. 분명 큰 틀은 맞는 것 같은데 계속 틀리길래 많이 고민을 했는데 내가 작성한 코드 기준으로는 정답 배열 길이가 홀수일 때 정가운데에 있는 인덱스의 값도 바꿔줘야하는데 그냥 Leave 아이디인 채로 남아 있어서 틀린거였다. 허탈...ㅠ.ㅠ
내가 푼 방식은 닉네임을 바꾼걸 적용하는 것은 어차피 제일 마지막에 적용한 거니까 주어진 배열을 거꾸로 순회하면서 일단 Enter와 Change만 처리한다. Leave는 split() 했을 때 배열의 길이가 2이기 때문이다. 그래서 Leave는 나중에 배열을 뒤집을 때 처리한다.
'코딩테스트 (프로그래머스) > Java' 카테고리의 다른 글
| [프로그래머스][JAVA][Lv. 2] 파일명 정렬 (0) | 2023.11.01 |
|---|---|
| [프로그래머스][JAVA][Lv. 0] 치킨 쿠폰 (0) | 2023.10.31 |
| [프로그래머스][JAVA][Lv. 2] 스킬트리 (0) | 2023.10.29 |
| [프로그래머스][JAVA][Lv. 2] 주식가격 (0) | 2023.10.28 |
| [프로그래머스][JAVA][Lv. 2] 땅따먹기 (1) | 2023.10.27 |