티스토리 뷰

728x90

문제 링크

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

 

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

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

programmers.co.kr

 

풀이

문제에서 설명한 규칙대로 구현하면 됩니다.

굳이 팁을 찾자면 원본 문자열을 수정하는 것보다 필요할 때마다 새로운 문자열을 만드는 식으로 구현하는 게 더 편할 듯합니다.

 

정답 코드

#include <bits/stdc++.h>

using namespace std;

bool isLower(char c) {
	return 'a' <= c && c <= 'z';
}

bool isUpper(char c) {
	return 'A' <= c && c <= 'Z';
}

bool isDigit(char c) {
	return '0' <= c && c <= '9';
}

string solution(string new_id) {
	string s = new_id;
	for (int i = 0; s[i]; i++) {
		if (isUpper(s[i])) s[i] = s[i] - 'A' + 'a';
	}
	string s2;
	for (int i = 0; s[i]; i++) {
		char c = s[i];
		if (isLower(c) || isDigit(c) || c == '-' || c == '_' || c == '.') s2 += c;
	}
	string s3;
	bool dot = false;
	for (int i = 0; s2[i]; i++) {
		char c = s2[i];
		if (c == '.' && dot) continue;
		s3 += c;
		dot = c == '.';
	}

	if (!s3.empty() > 0 && s3.front() == '.') s3 = s3.substr(1);
	if (!s3.empty() > 0 && s3.back() == '.') s3.pop_back();
	if (s3.empty()) s3 += 'a';
	if (s3.size() >= 16) {
		s3 = s3.substr(0, 15);
		if (s3.back() == '.') s3.pop_back();
	}
	if (s3.size() == 1) s3 = s3 + s3 + s3;
	else if (s3.size() == 2) s3 += s3.back();

	return s3;
}
728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함