Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- c++
- 코테연습
- Stimuli
- AIPerception
- ue4macro
- 코테
- uproperty
- server
- dfs
- UnReal
- UE4
- 프로그래머스
- 나나이트
- EffectiveC++
- HTTP
- 재귀
- 언리얼4
- 문자열
- 다이나믹프로그래밍
- DP
- 언리얼
- UE5
- 코딩테스트
- Widget
- 동적계획법
- Unity
- 알고리즘
- UMG
- blueprint
- 유니티
Archives
- Today
- Total
공부 기록
[프로그래머스] level 1 - 숫자 문자열과 영단어 (C++) 본문
사실 간단한 문제라 포스팅까지는 안하려고 했는데, 짚고 넘어가고 싶은 부분이 있어서 글로 적어두기로 했다.
비루한 내 코드 아래에 문제 설명과 함께 예쁜 풀이도 같이 적어뒀다.
#include <string>
#include <vector>
using namespace std;
string number(int n) {
if (n == 0) return "zero";
else if (n == 1) return "one";
else if (n == 2) return "two";
else if (n == 3) return "three";
else if (n == 4) return "four";
else if (n == 5) return "five";
else if (n == 6) return "six";
else if (n == 7) return "seven";
else if (n == 8) return "eight";
else if (n == 9) return "nine";
}
int solution(string s) {
// 0~9까지 영어로 바뀐 문자열을 원래대로 숫자로 되돌려 놓기
string str; int idx = -1;
for (int i = 0; i <= 9; i++)
{
str = number(i);
idx = s.find(str);
while (idx >= 0) { // 찾는 문자가 있으면
s.replace(idx, str.size(), to_string(i)); // 숫자로 교체
idx = s.find(str);
}
}
return stoi(s);
}
숫자로 구성된 문자열의 일부를 영단어로 바꾼 문자열을 원래대로 돌려놓는 문제인데,
아무 생각 없이 if-else 문을 덕지덕지 해놓고 다른 사람들 풀이를 보니 그냥 string array로 깔끔하게 코드를 짜놓았다.
더 간략하게는 find와 replace 를 동시에 수행하는 regex_replace를 사용한 코드도 있었다.
물론 쉬운문제라면 복잡하게 생각할 필요 없이 휘리릭 짜고 넘어가면 되지만, 코드를 더 보기 좋게 줄일 수 있다면 그렇게 연습하는 것이 더 좋다고 생각하기 때문에 이렇게 글로 써 정리해둔다!
아래는 string array 와 refex_replace를 써서 풀이한 코드인데, 길이부터가 엄청나게 줄어든 것을 알 수 있다...
// #include <regex>
string str[] = {"zero", "one", ... , "eight", "nine"};
for(int i=0; i < 10, i++){
s = regex_replace(s, regex(str[i]), to_string(i));
}
처음 풀 때부터 이렇게 갓벽하게 풀 수 있다면 얼마나 좋을까... 흙 흙
아 물론 실행시간은 거의 3배정도 더 걸리긴 했다. 과연 어떤게 더 좋은 코드인걸까? 코테용으로 볼땐 당연 후자려나?
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] level 2 - 124 나라의 숫자 (C++) (0) | 2022.02.27 |
---|---|
[프로그래머스] level 2 - 멀쩡한 사각형 (C++) (0) | 2022.02.23 |
[프로그래머스] level 3 - 추석 트래픽 (C++) (1) | 2022.02.16 |
[프로그래머스] level 2 - 문자열 압축 (C++) (0) | 2022.02.16 |
[프로그래머스] level 2 - 오픈채팅방 (C++) (0) | 2022.02.13 |
Comments