-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
🙋🏼 문제
💡 풀이
쉬워보이는데 생각보다 품이 많이 든 문제!
record의 값을 전부 확인한 후 (id 체크), 출력을 위해서 다시 id와 leave / enter 체크를 해줘야 한다.
물론 실제라면 UI에서 일부만 확인해서 바꿔줘야겠지만.. (어케함!)
coding_test_practice/coding_test_practice/240702_42888.swift
Lines 11 to 15 in 05f2b45
| let enter = "님이 들어왔습니다." | |
| let leave = "님이 나갔습니다." | |
| var member = [String : String]() | |
| var arr: [[String]] = [] | |
| var result: [String] = [] |
enter, leave 시의 텍스트를 따로 저장해주었고, member dictionary에는 id와 닉네임을 저장할 수 있도록 했다.
arr는 두번째 단계에서 id와 leave / enter 확인해줄 때 사용해주기 위함이고, result는 결과 array
coding_test_practice/coding_test_practice/240702_42888.swift
Lines 17 to 30 in 05f2b45
| record.forEach { | |
| let text = $0.components(separatedBy: " ") | |
| switch text[0] { | |
| case "Enter": | |
| arr.append([text[1], enter]) | |
| member[text[1]] = text[2] | |
| case "Leave": | |
| arr.append([text[1], leave]) | |
| case "Change": | |
| member[text[1]] = text[2] | |
| default: | |
| return | |
| } | |
| } |
record의 문장을 하나씩 보며 space를 기준으로 나눠주었다.
Enter / Leave / Change로 나뉘게 되는 text[0]을 switch - case 문으로 나눴다.
- Enter 시, id에 해당하는 text[1]와 닉네임에 해당하는 text[2]를 member dictionary에 넣었다.
그리고 id와 enter 텍스트를 arr에 추가했다.
(생각해 보니까 굳이 enter 텍스트를 여기서 넣었어야 하나 싶다.. 걍 result 단계에서 넣어줄걸..) - Leave 시, id와 leave 텍스트를 arr에 추가했다. member를 건들지 않은 것은 여기서는 id가 바뀌지 않고, 앞선 Enter가 없다면 Leave가 발생할 수 없는데 Enter에서 이미 member를 건드리기 때문!
- Change 시, result에 출력되는 것이 없기 때문에 arr에 추가할 필요는 없고, 이름이 바뀌었을 때 member의 id를 확인해서 바꿔줘야 하기 때문에 member id에 이름을 교체해주었다.
coding_test_practice/coding_test_practice/240702_42888.swift
Lines 32 to 38 in 05f2b45
| arr.forEach { | |
| if let name = member[$0[0]] { | |
| result.append(name + $0[1]) | |
| } else { | |
| return | |
| } | |
| } |
arr를 forEach로 확인해 주면서, result에 해당 id에 해당하는 이름과 enter / leave 텍스트를 추가해주었다.
그리고 마지막에 return result로 답 반환
처음 채점 때 if let 문 안 써서 테스트 케이스 하나가 날라감..
상여자식 코드 (강제 언래핑) 쓰려다가 말았다 ㅋㅋ;;