티스토리 뷰

문제

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

 

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

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

programmers.co.kr

 

풀이

문제에서 구현하라는대로 그대로 따라 구현하면 됩니다. c++의 경우 isupper, tolower, substr과 같은 문자열(문자)를 다루는 stl을 적절히 사용하면 더 간단하게 구현할 수 있습니다.

 

코드

#include <bits/stdc++.h>
using namespace std;

bool isok(char x) {
	if (islower(x) || isdigit(x) || x == '-' || x == '_' || x == '.') return 1;
	return 0;
}

string solution(string new_id) {
	string tmp = "";
	
	// #1 대문자 소문자로 치환
	for (char &c : new_id) if (isupper(c)) c = tolower(c);

	// #2 주어진 문자만 문자열로 
	for (char c : new_id) if (isok(c)) tmp += c;

	new_id = "";
	
	// #3 마침표 제거
	for (int i = 0; i < tmp.size(); i++)
		if (tmp[i] != '.' || (!new_id.empty() && new_id.back() != '.')) new_id += tmp[i];
	
	// #4 마침표가 시작 or 끝이라면 제거
	if (new_id.back() == '.') new_id.pop_back();
	if (new_id.front() == '.') new_id = new_id.substr(1);
	
	// #5 빈 문자열이면 'a'대입
	if (new_id.empty()) new_id.push_back('a');
	
	// #6 문자열 길이 조절 및 마지막 마침표 제거
	if (new_id.size() >= 16) new_id = new_id.substr(0, 15);
	while (new_id.back() == '.') new_id.pop_back();
	
	// #7 문자열 길이 조절
	while (new_id.size() <= 2) new_id += new_id.back();
	return new_id;
}

 

 

 

댓글