https://school.programmers.co.kr/learn/courses/30/lessons/42888
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
변수 선언
- situation = "Enter", "Leave", "Change"를 받는 상황을 나타내는 문자열 배열
- userID = 유저 아이디를 받을 문자열 배열
- nickName = "Prodo", "Muzi" 같은 닉네임을 담을 문자열 배열
- dic = key값에 userID, value값에 nickName을 담을 문자열 딕셔너리
- element = record의 각 요소들을 한 단어 나누어 추가하는 문자열 배열
- ex)"Enter uid1234 Muzi" -> ["E","n","t","e","r"," ","u","i","d","1","2","3","4"," ","M","u","z","i"]
- str = element 각 요소들을 접근하여 차례로 추가하는 문자열
- space = element의 공백의 갯수
- id = dic 에 key값에 담을 문자열
- result = 방을 개설한 사람이 보게 되는 메시지를 문자열 배열 형태로 다음 배열
풀이방법)
1. record 문자열 배열의 요소들을 차례로 한 문자씩 담을 수 있도록 .map 고차함수를 이용하여 매핑해줌
- element = record의 각 요소들을 한 단어 나누어 추가하는 문자열 배열
2. element 문자열 배열의 요소들 중 " " 공백을 기준으로 조건문을 만듦
- " "공백인것 중에 space가 0(첫 공백)이라면
str은 "Enter", "Leave", "Change" 중에 한 가지를 담고 있으므로
situation 배열에 .append를 이용해 str 추가
추가후 str 을 다시 사용해야 하므로 빈문자열 ""로 초기화
space에 1추가 해줌
- " "공백인것 중에 나머지 (두 번째 공백)이라면
str은 "uid1234" 와 같이 id를 담고 있는 문자열임
id에 str을 추가함 - 추후에 딕셔너리에서 key 값에 사용해야 하므로
str 을 다시 사용해야 하므로 빈문자열 ""로 초기화
space 1추가 해줌
- " "공백이 아니라면
str에 element의 요소를 추가해줌
- 만약에 j가 마지막 요소 즉(j = element.count -1)이고
- 마지막 요소 중에 space 가 2인 (입장하거나 이름을 변경) 경우라면
str이 "Prodo","Muzi"와 같은 닉네임으로 nickName 배열에 추가해줌
이때 dic 딕셔너리의 key값과 value값을 초기화 할 수 있으므로 dic[id]에 str을 넣어줌
* 딕셔너리 사용한 이유는 입장하거나 이름 변경시을 아무리해도 마지막 id이름(key값)으로 nickName(value)을 찾아서 변경해 문 자열로 바꾸기 위함임
다음 새로운 element 배열의 요소에 접근을 하므로 str을 빈문자열로 초기화
-마지막 요소 중에 space가 1일 경우
"Leave"의 경우이고 str이 "uid1234"와 같은 유저 아이디이므로 userID에 추가
이렇게 되면 situation과 userID의 개수는 동일해짐
nickName의 개수는 situation의 개수 - Leave의 개수임
situation의 요소에 접근해 "Enter", "Leave"라면
dic 딕셔너리의 key값에 맞는 value를 찾아 문자열에 추가해 result에 append 메서드로 추가후 반환
key -> userID[i]
import Foundation
func solution(_ record:[String]) -> [String] {
var situation = [String]()
var userID = [String]()
var nickName = [String]()
var dic: [String : String] = [:]
for i in 0..<record.count{
let element = record[i].map{String($0)}
var str = ""
var space = 0
var id = ""
for j in 0..<element.count{
if element[j] == " "{
if space == 0{
situation.append(str)
str = ""
space += 1
}
else{
userID.append(str)
id = str
str = ""
space += 1
}
}
else{
str += element[j]
if j == element.count - 1{
if space == 2{
nickName.append(str)
dic[id] = str
str = ""
}
else{
userID.append(str)
}
}
}
}
}
var result = [String]()
for i in 0..<situation.count{
if situation[i] == "Enter"{
result.append(dic[userID[i]]! + "님이 들어왔습니다.")
}
if situation[i] == "Leave"{
result.append(dic[userID[i]]! + "님이 나갔습니다.")
}
}
return result
}
'Swift랑 친해지기 > programmers 풀기' 카테고리의 다른 글
[프로그래머스] 제곱수 판별하기 (Swift) (1) | 2022.11.13 |
---|---|
[프로그래머스] 문자 반복 출력하기 (Swift) (0) | 2022.11.12 |
[프로그래머스] 저주의 숫자 3 (Swift) (0) | 2022.11.10 |
[프로그래머스] 프린터 (Swift) (0) | 2022.11.09 |
[프로그래머스] 모의고사 (Swift) (0) | 2022.11.08 |