[Level 1] 신규 아이디 추천

2022. 7. 3. 19:21·이전 게시글/공부 관련

프로그래머스 연습 문제 레벨 1 신규 아이디 추천


친구가 풀어보라고 추천해준 문제이다. 단계별 원하는 조건을 하나 하나 맞추다 보니 풀어지는 문제였다.

 

#include <string>
#include <vector>
#include <algorithm>
using namespace std;

void step_1(string &str) {
    transform(str.begin(), str.end(), str.begin(), ::tolower);
}
void step_2(string &str) {
    string temp;
    for (char& c : str) {
        if (islower(c) || isdigit(c) || c == '-' || c == '_' || c == '.') temp.push_back(c);
    }
    str = temp;
}
void step_3(string &str) {
    vector<int> count;
    char pre_char = str[0];
    for (int i = 1; i < str.length(); i++) {
        if (str[i] == '.') {
            if (pre_char == str[i]) {
                count.push_back(i);
            }
        }
        pre_char = str[i];
    }
    for (int i = count.size() - 1; i >= 0; i--) {
        str.erase(str.begin() + count[i]);
    }
}
void step_4(string &str) {
    if (str.front() == '.') str.erase(str.begin());
    if (!str.empty()) {
        if (str.back() == '.') str.erase(str.begin() + str.length() - 1);
    }
}
void step_5(string &str) {
    if(str.empty()) str.push_back('a');
}
void step_6(string &str) {
    while (str.length() > 15) {
        str.pop_back();
    }
    while (str.back() == '.') {
        str.pop_back();
    }
}
void step_7(string &str) {
    while (str.length() < 3) {
        str.push_back(str[str.length() - 1]);
    }
}


string solution(string new_id) {
    string answer = new_id;
    if (!answer.empty()) step_1(answer);
    if (!answer.empty()) step_2(answer);
    if (!answer.empty()) step_3(answer);
    if (!answer.empty()) step_4(answer);
    step_5(answer);
    step_6(answer);
    step_7(answer);
    return answer;
}

 

1단계 부터 7단계 가지 순차적으로 동작하도록 만들었는데 다른 사람들 풀이를 보니 굳이 그렇게 하지 않아도 됐던 것 같다.

 

저작자표시 (새창열림)

'이전 게시글 > 공부 관련' 카테고리의 다른 글

[Level 1, C++] 소수 만들기  (0) 2022.07.03
[Level 1] 없는 숫자 더하기  (0) 2022.07.03
[C++] fill, fill_n 배열을 초기화 하는 방법, 2차원, 3차원 배열 초기화  (0) 2022.04.11
[C언어] 하샤드수 구하기, int 각 자릿수 더하기  (0) 2022.02.23
[파이썬] 달력 만들기 import turtle 사용 calendar 없이 만들기  (3) 2019.11.28
'이전 게시글/공부 관련' 카테고리의 다른 글
  • [Level 1, C++] 소수 만들기
  • [Level 1] 없는 숫자 더하기
  • [C++] fill, fill_n 배열을 초기화 하는 방법, 2차원, 3차원 배열 초기화
  • [C언어] 하샤드수 구하기, int 각 자릿수 더하기
aptenia
aptenia
공부하면서 배운 것들
  • aptenia
    새벽의 아이디어
    aptenia
  • 전체
    오늘
    어제
    • 분류 전체보기 (276)
      • f1tenth (2)
      • 이전 게시글 (268)
        • 개발 관련 (25)
        • 정보 관련 (19)
        • 공부 관련 (224)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 네이버 블로그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    마인크래프트강화스크립트
    이것이자바다
    마크
    캡스톤디자인
    자바
    티스토리반응형2스킨편집
    티스토리스킨편집
    C언어
    C언어강좌
    C++강좌
    콜라츠추측
    티스토리HTML
    파이썬
    컨텍스트스위칭
    파이어베이스
    빅데이터공모전
    c언어초보
    공개SW개발자대회
    백준
    스크롤바CSS
    반복하지않는수
    일본규슈공업대학교
    프로그래머스
    이것이자바다연습문제
    프로그래머스PCCE
    마인크래프트
    이것이자바다확인문제
    마크스크립트
    마인크래프트스크립트
    안드로이드
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
aptenia
[Level 1] 신규 아이디 추천
상단으로

티스토리툴바