본문 바로가기

Algorithm

Algorithm(Swift) - 신규 아이디 추천

프로그래머스 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

 

ASCII Table - 아스키 코드표

(아스키코드를 알면 C/C++이나 Java 등으로 문자열 함수를 다루거나 파일 함수를 다룰때 도움이 됩니다.) 컴퓨터는 0과 1 숫자 밖에 모르기 때문에 문자도 숫자로 기억합니다. 이때, 어떤 숫자와 어

shaeod.tistory.com

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#

 

코딩테스트 연습 - 신규 아이디 추천

카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로

programmers.co.kr