

이번에도 string 함수들을 적절히 이용해야 풀어야했던 문제이다. 저번 한번 풀어만 봤지 아직 익숙하진 않다,,는 걸 굉장히 느낌!
이번에 참고한 string 관련 포스팅
알고리즘 - C++에서 문자열(string) 다루기 | ChanBLOG (chanhuiseok.github.io)
주어진 문자열을 index = 0 부터 index = s.length() -1 까지 for문을 돌면서
숫자면 answer에 그대로 하나씩 넣어주고, 문자면 문자열이 끝날때까지 while문을 돌면서 숫자로 변환시켜주도록 작성했다.
숫자인 경우는 쉬워보였지만 사실 여기서도 애 먹었다.
answer = 0 부터 시작을 하니까
answer = ( answer + s[i] ) * 10 을 해줌으로써 answer인 숫자를 만들어가려고 했는데 이상한 숫자가 뜨는 것
알고보니까 s[i]는 char타입이라 int와 더했을때 아스키 코드로 더해졌던 것이다.
그래서..~ c++ 에서 숫자 string을 int로 바꿔주는 방법인
숫자 문자열을 int로 변환
stoi, atoi / ASCII 코드 이용( s-48 )
[C++] stoi, stof, stol, stod 함수에 대해서 (string to int) (tistory.com)
[C언어/C++] atoi, atof, atol 함수 (char* to int) (tistory.com)
stoi()와 atoi()를 이용하려고 했는데 실행이 안됐다.. 이유는 아직도 불문임
그래서 차선책으로 -48을 집접 빼주는 하드코딩을 하기로 했다.
그렇게 완성된 코드는 아래
cout문을 사용해서 잘 변환/ answer에 추가가 되고 있는지 확인했다.

출력 부분 보면 잘 되고 있음!
break, continue문
그리고 또 while문을 사용하다 보니 break문을 사용해야 했는데, 정확하게 하기 위해 정리한다.
break는 가장 가까운 반복문을 빠져나오게한다.
반복 문안에서 continue를 만나면 다시 반복문 조건 검사 위치로 이동하는 것.
그렇게 완성된 코드!

완전한 문자열이 발견되면 해당 숫자를 return

cout문도 사용해서 아래처럼 buf에 잘 들어가고, 숫자로 변형되는 것을 확인했다.

문제의 빌런놈. 너구나 이놈
ifcomplete()이라는 함수가 0~9까지를 return하고, 완전하지 않은 문자열이면 -1을 return하도록 작성했다.
따라서 ifcomplete(buf) >= 0 이 돼야 정상 반환인것....^__ㅠ

새비스콘 편--안 급 통쾌함
그렇게 힘겹게 끝이난 3번째 문제.
그리고.. 가장 처음에 뜬 다른 분의 풀이

regex()랑 stoi()로만 푸심,,, 대박
stoi()는 사용하려고 했는데 난 왜 안됐지.. regex()는 처음봐서 서치를 해보니 c++ 11 부터 표준에 포함된 정규 표현식 라이브러리라고 한다.
정규 표현식은 문자열 패턴을 찾는데 사용되는데,
1) 문자열이 규칙에 맞는지 확인 (regex_match)
2) 원하는 패턴의 문자열을 검색 (regex_search)
3) 원하는 패턴의 문자열로 치환할때 (regex_replace)
사용된다고 한다.
이번 문제는 2, 3번 모두 해당하므로 저렇게 이것만 사용해서 가능했던 것이다.. 대박
씹어먹는 C++ - <17 - 2. C++ 정규 표현식(<regex>) 라이브러리 소개> (modoocode.com)
regex를 찾아보던 도중 2018 카카오 기출에서도 사용됐었단다. 알아두자!!!!
이 분들도 regex를 사용하셔서 첨부

또 다른 풀이인데 regex를 사용안하고 푼 풀이!

이건 왜 가져왔냐면 나는 zero, one, two, ... 들을 숫자로 치환할때 if-else문을 사용해서 늘여놓았다. 늘여놓으면서.... 더 기발한 방법은 없을까? 풀이보면 다른 사람들은 그렇게 했겠지? 했는데 이 분이 딱 그러하심
string type의 배열에 zero, one, two, ... 를 넣어놓고 index를 반환하는 방법을 사용하셨어. 대박. 이런 방법이!!! 좋다!! 멋있으십니당.
다른 풀이

이건 왜 첨부하냐면 if-else문을 늘여놓기 전에 switch-case문을 사용하려고 했는데...! 저번에 풀면서 이제 이거 잘 활용하면서 하겠다고 다짐을 해소.. 근데 int가 아니고 문자여서 어케 할지 모르겠어서 포기함.
이 분이 switch-case문을 사용했는데, 주어진 문자열의 첫부분을 가리키는 pointer *iter을 사용한다.
'‡ CODING TEST STUDY ‡ > º 프로그래머스' 카테고리의 다른 글
프로그래머스 [Lv1] | 신고 결과 받기 (0) | 2023.07.27 |
---|---|
프로그래머스 [Lv1] | 크레인 인형뽑기 게임 (0) | 2023.07.27 |
프로그래머스 [Lv1] | 키패드 누르기 (0) | 2023.07.27 |
코딩 테스트 연습 [Lv1] | 신규 아이디 추천 (0) | 2023.07.27 |
프로그래머스 [Lv1] | 로또의 최고 순위와 최저 순위 (0) | 2023.07.27 |