티스토리 뷰
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
'알고리즘 > 문제 풀이' 카테고리의 다른 글
[프로그래머스] 순위 검색 (2021 KAKAO Blind Recruitment) (0) | 2021.02.07 |
---|---|
[프로그래머스] 메뉴 리뉴얼 (2021 KAKAO Blind Recruitment) (0) | 2021.02.07 |
[프로그래머스] 괄호 변환 (2020 KAKAO Blind Recruitment) (3) | 2020.11.19 |
[프로그래머스] 문자열 압축 (2020 KAKAO Blind Recruitment) (2) | 2020.11.19 |
[프로그래머스] 튜플 (Javascript, 2019 카카오 개발자 겨울 인턴십) (0) | 2020.11.14 |
댓글