프로그래머스 2021 KAKAO BLIND RECRUITMENT 신규 아이디 추천 문제입니다.
해당 문제 같은경우는 어떻게보면 7가지 스텝으로 나뉘어져 있기때문에해당 스텝에 맞춰서 해결해 나가면 편합니다.
문제 키포인트 입니다.
1단계 new_id의 모든 대문자를 대응되는 소문자로 치환합니다.
2단계 new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다.
3단계 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다.
4단계 new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다.
5단계 new_id가 빈 문자열이라면, new_id에 "a"를 대입합니다.
6단계 new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다. 만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거합니다.
7단계 new_id의 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙입니다.
1단계
let lowercased = new_id.lowercased()
모든 대문자를 소문자로 치환합니다.
2단계
let caseArray = Array(lowercased)
var asciiArray = Array<String>()
caseArray.forEach {
value in
if let char = Character(extendedGraphemeClusterLiteral: value).asciiValue {
if (45...46).contains(char) || char == 95 || (48...57).contains(char) || (65...90).contains(char) || (97...122).contains(char) {
asciiArray.append(String(value))
}
}
}
result = asciiArray.joined()
따로 정규식을 이용하지 않고, 아스키 코드를 이용하여 진행했습니다. (영문, 숫자, 빼기(-), 밑줄(_), 마침표(.) 만 포함 했습니다.)
아스키 코드상에 포함 되어 있다면 문자열을 추가해서 붙입니다.
참고 : https://shaeod.tistory.com/228
3단계
while result.contains("..") {
result = result.replacingOccurrences(of: "..", with: ".")
}
2개 이상의 마침표를 제거합니다. 예시로 마침표가 이어서 3개가 있을경우에 지우면 다시 2개가 남을수 있기때문에
while문을 돌려 모든 연속된 마침표를 제거 합니다.
4단계
if result.first == "." {
result.removeFirst()
}
마침표가 처음, 마지막일경우에 제거 합니다. 하지만, 마지막일 경우는 지금 제거하지 않습니다.
5단계
if result.count == 0 {
result = "a"
}
결과적으로 문자열이 비면 a 로 처리하여 추가합니다.
6단계
if result.count >= 16 {
result = String(result.prefix(15))
}
if result.last == "." {
result.removeLast()
}
길이가 16이상이면 15자까지 문제를 맞춰주고 나머지 문자를 제거 합니다.
여기서, 제거한 문자의 마지막이 마침표일경우에 삭제 해줘야합니다.
7단계
while result.count < 3 {
result.append(result.last!)
}
최종적으로 길이가 2자 이하라면 마지막 문자를 붙여서 3자리를 맞춰줍니다
https://programmers.co.kr/learn/courses/30/lessons/72410#
'Algorithm' 카테고리의 다른 글
Algorithm(Swift) - 숫자 문자열과 영단어 (0) | 2021.09.22 |
---|---|
Algorithm(Swift) - 부족한 금액 계산하기 (0) | 2021.09.12 |
Algorithm(Swift) - H-Index (0) | 2021.08.28 |
Algorithm(Swift) - 가장 큰 수 (0) | 2021.08.27 |
Algorithm(Swift) - 모의고사 (0) | 2021.08.27 |