Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- IntelliJ
- 스타트업
- docker
- 해시맵
- HTTP
- dfs
- HashMap
- 백엔드
- 개발자
- 인텔리제이
- 명령어
- 스프링
- bfs
- 구현
- 프로그래머스
- 스프링부트
- 이직
- 배열
- 구름LEVEL
- 코딩테스트
- 스프링 부트
- 주니어
- Java
- spring boot
- 도커
- 문자열
- 자료구조
- 해결
- Linux
- spring
Archives
- Today
- Total
마이의 개발 블로그
[프로그래머스] 오픈채팅방 (Java) 본문
반응형
처음에는 메시지를 먼저 만들어주고 나중에 마지막 닉네임으로 전부 교체해주는 식으로 접근하였으나, 시간초과와 런타임 에러가 나서 접근방식을 바꾸고 해결된 문제이다.
- record를 한 바퀴 돌며 id에 해당하는 마지막 닉네임을 map에 저장 (key: 아이디, value: 닉네임)
- 같은 반복문 안에서 Change 명령어를 제외한 Enter, Leave의 경우에만 list에 저장
- list 사이즈만큼 String[] answer 생성
- map.get 메서드로 ID 가져오기 (중요)
- Enter, Leave에 따라 문구추가
Note
- 몇 달 전에 코테 문제 풀기 시작했을 때 이 문제를 보고 어떻게 해결해야할지 막막했는데 지금은 일단 손이 먼저 타이핑부터 시작하는 걸 보니 성장을 하고있는건가 싶기도 하다.
- 프로그래머스 질문하기 게시판에 개발자들이 문제 접근방법이나 예외사항에 대한 각자의 팁들을 게시해놓는데, 종종문제와 상관없는 경우를 본다. 이번 문제의 경우에는 특수문자를 걸러야 한다던지 글자수를 체크해야한다는 의견도 있었는데 문제를 잘 읽어보면 잘못된 명령어가 들어오는 경우는 없다고 표기되어있다.
import java.util.*;
class Solution {
public String[] solution(String[] record) {
String[] answer = {};
Map<String, String> map = new HashMap<>();
List<String> list = new ArrayList<>();
for(int i = 0; i < record.length; i++){
String[] arr = record[i].split(" ");
if(arr[0].equals("Enter") || arr[0].equals("Leave")){
list.add(record[i]);
}
if(arr.length > 2){
map.put(arr[1], arr[2]);
}
}
answer = new String[list.size()];
for(int i = 0; i < answer.length; i++){
String[] arr = list.get(i).split(" ");
answer[i] = "" + map.get(arr[1]);
if(arr[0].equals("Enter")){
answer[i] += "님이 들어왔습니다.";
}else if(arr[0].equals("Leave")){
answer[i] += "님이 나갔습니다.";
}
}
return answer;
}
}
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 스킬트리 (Java) (0) | 2023.02.02 |
---|---|
[프로그래머스] 괄호 회전하기 (Java) - 간단한 버전 (0) | 2023.02.01 |
[프로그래머스] 위장 (Java) (0) | 2023.01.29 |
[프로그래머스] 프린터 (Java) (0) | 2023.01.27 |
[프로그래머스] 타겟 넘버 (Java) (0) | 2023.01.27 |
Comments