반응형
문제
- 문제 링크: 오픈 채팅방
해설
- 자료구조:
- 시간복잡도:
(풀이과정)
1)
2)
3)
4)
코드
(C언어)
solution 1)
더보기
solution 1
#include<>
solution 2)
더보기
#include<>
solution 3)
더보기
#include<>
(C++)
solution 1)
더보기
#include<>
solution 2)
더보기
#include<>
solution 3)
더보기
#include<>
(C#)
solution 1)
더보기
#include<>
solution 2)
더보기
#include<>
solution 3)
더보기
#include<>
(Java)
solution 1)
- N: record의 길이
- 첫 번째 반복문에서 record의 모든 항목을 순회하므로 O(N)이고 두 번째 반복문은 O(N)
- 최종 시간 복잡도: O(N)
더보기
import java.util.ArrayList;
import java.util.HashMap;
class Solution {
public String[] solution(String[] record) {
// Enter/Leave 메세지를 저장할 해시맵 생성
HashMap<String, String> msg = new HashMap<>();
msg.put("Enter", "님이 들어왔습니다.");
msg.put("Leave", "님이 나갔습니다.");
HashMap<String, String> uid = new HashMap<>();
// record의 각 줄을 하나씩 처리
for (String s : record) {
String[] cmd = s.split(" ");
if (cmd.length == 3) { // Enter 또는 Change인 경우
uid.put(cmd[1], cmd[2]);
}
}
// 답을 저장할 answer List 생성
ArrayList<String> answer = new ArrayList<>();
// record의 각 줄을 하나씩 처리
for (String s : record) {
String[] cmd = s.split(" ");
// 각 상태에 맞는 메세지를 answer에 저장
if (msg.containsKey(cmd[0])) {
answer.add(uid.get(cmd[1]) + msg.get(cmd[0]));
}
}
return answer.toArray(new String[0]);
}
}
solution 2)
더보기
#include<>
solution 3)
더보기
#include<>
(Python)
solution 1)
- N: record의 길이
- 첫 번째 반복문에서 record의 모든 항목을 순회: O(N)
- 두 버째 반복문의 시간 복잡도: O(N)
- 최종 시간 복잡도: O(N)
더보기
def solution(record):
answer = []
uid = {}
for line in record: # record의 각 줄을 하나씩 처리
cmd = line.split(" ")
if cmd[0] != "Leave": # Enter 또는 Change인 경우
uid[cmd[1]] = cmd[2]
for line in record: # record의 각 줄을 하나씩 처리
cmd = line.split(" ")
# 각 상태에 맞는 메시지를 answer에 저장
if cmd[0] == "Enter":
answer.append("%s님이 들어왔습니다." %uid[cmd[1]])
elif cmd[0] == "Change":
pass
else:
answer.append("%s님이 나갔습니다." % uid[cmd[1]])
return answer
solution 2)
더보기
import
solution 3)
더보기
import
(JavaScript)
solution 1)
- N: record의 길이
- 첫 번째 반복문에서 record의 모든 항목을 순회: O(N)
- 두 번째 반복문: O(N)
- 최종 시간 복잡도: O(N)
더보기
function solution(record) {
answer = [];
uid = {};
for (line in record) { // record의 각 줄을 하나씩 처리
cmd = record[line].split(" ");
if (cmd[0] != "Leave") { // Enter 또는 Change인 경우
uid[cmd[1]] = cmd[2];
}
}
for (line in record) { // record의 각 줄을 하나씩 처리
cmd = record[line].split(" ");
// 각 상태에 맞는 메시지를 answer에 저장
if (cmd[0] == "Enter") {
answer.push(uid[cmd[1]] + "님이 들어왔습니다.");
} else if (cmd[0] == "Leave") {
answer.push(uid[cmd[1]] + "님이 나갔습니다.");
}
}
return answer;
}
solution 2)
더보기
import
solution 3)
더보기
import
반응형
'1-4. 코딩테스트 문제집(진행중) > PCCP(Lv2)' 카테고리의 다른 글
[PCCP] Lv2: 예상 대진표(12985) 해설 (0) | 2024.12.24 |
---|---|
[PCCP] Lv2: 메뉴 리뉴얼(72411) 해설 (0) | 2024.12.24 |
[PCCP] Lv2: 할인 행사(131127) 해설 (0) | 2024.12.24 |
[PCCP] Lv2: 전화번호 목록(42577) 해설 (0) | 2024.12.24 |
[PCCP] Lv2: 영어 끝말잇기(12981) 해설 (0) | 2024.12.24 |