Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

오픈채팅방 #42888 #3

Open
chaentopia opened this issue Jul 2, 2024 · 0 comments
Open

오픈채팅방 #42888 #3

chaentopia opened this issue Jul 2, 2024 · 0 comments
Assignees

Comments

@chaentopia
Copy link
Owner

🙋🏼 문제

오픈채팅방

💡 풀이

쉬워보이는데 생각보다 품이 많이 든 문제!
record의 값을 전부 확인한 후 (id 체크), 출력을 위해서 다시 id와 leave / enter 체크를 해줘야 한다.
물론 실제라면 UI에서 일부만 확인해서 바꿔줘야겠지만.. (어케함!)

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

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에 이름을 교체해주었다.

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 문 안 써서 테스트 케이스 하나가 날라감..
상여자식 코드 (강제 언래핑) 쓰려다가 말았다 ㅋㅋ;;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant