https://programmers.co.kr/learn/courses/30/lessons/72410

 

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

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

programmers.co.kr

 

아스키 값 활용하여 단계별로 수행

new_id가 빈 문자열일 경우 5단계, 7단계만 수행하기 때문에 무조건 aaa 반환

 

각 단계별로 변환된 id 값을 tmp 에 저장

모든 단계를 마친 후 answer에 tmp의 값을 저장

 

while 문을 사용하여 변환 횟수를 탐지(cnt)

while문 한 번 돌 때 변환이 한번도 일어나지 않았다면 변환 완료된 경우이므로 while문 탈출 후 출력

 

 

1. 대문자의 경우 아스키 값에 32를 더한 후 char로 형변환화여 소문자로 출력

2. 아스키값 범위를 사용해서 허용된 문자가 아니면 삭제하여 저장

3, 4. 연속된 마침표를 검사하여 하나의 마침표만 출력. 해당 마침표가 시작, 끝일 경우 넘어감

5. 빈 문자열일 경우 a 저장

6. 최초 15개의 문자만 저장

7. 길이 2 이하인 id에 끝 글자를 계속 더해서 길이 3을 만듬

 

 

 

string solution(string new_id) {
	string answer = new_id;
	string tmp;
	int cnt=1;

	if (new_id.size() == 0) {
		answer.push_back('aaa');
		return answer;
	}


	while (cnt) {
		cnt = 0;
		// 1
		for (int i = 0; i < answer.size();i++) {
			int asc = answer[i];
			if (asc <= 90 && asc >= 65) {
				tmp.push_back((char)asc + 32);
				cnt++;
			}
			else
				tmp.push_back((char)asc);
		}
		answer.clear();
		answer = tmp;
		tmp.clear();

		// 2
		for (int i = 0; i < answer.size();i++) {
			int asc = answer[i];
			if (asc != 46 && asc != 45 && asc != 95 && (asc < 48 || asc>57) && (asc < 97 || asc>122)) {
				cnt++;
				continue;
			}
			else
				tmp.push_back((char)asc);
		}
		answer.clear();
		answer = tmp;
		tmp.clear();

		// 3+4
		for (int i = 0; i < answer.size();i++) {
			int asc = answer[i];
			int asc2 = answer[i + 1];
			if (asc == 46 && asc2 == 46) {
				cnt++;
				continue;
			}
			else {
				if (asc == 46 && (tmp.empty() || answer[i + 1] == NULL)) {
					cnt++;
					continue;
				}
				tmp.push_back((char)asc);
			}
		}
		answer.clear();
		answer = tmp;
		tmp.clear();


		// 5
		if (answer.size() == 0) {
			cnt++;
			answer.push_back('a');
		}


		// 6
		if (answer.size() >= 16) {
			while (answer.size() > 15) {
				cnt++;
				answer.pop_back();
			}
		}

		// 7
		if (answer.size() <= 2) {
			while (answer.size() <= 2) {
				cnt++;
				answer.push_back(answer[answer.size() - 1]);
			}

		}
	}
	return answer;
}

 

+ Recent posts