
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 내용, 조건, 예시는 프로그래머스 사이트 참조
알고리즘
문자열로 구성된 숫자를 비교를 하는 방법에는
- 문자열을 숫자로 변환해서 크기 비교
- 문자열끼리 크기 비교
1. 문자열을 숫자로 변환해서 크기 비교는 문자열을 숫자(정수)로 변환은 stoi, stol, stoll 으로 변환해주면된다.
여기서 주의해야 할 점은 문자열의 길이가 너무 길어서 sto~ 로 변환시에 자료형의 크기를 넘어가는 경우이다.
ex) "interger MAX 2,147,483,647"이지만 string("11111111111") 이라면 stoi로 변환 시 'std::out_of_range'가 발생한다
2. 문자열끼리 크기 비교는 문자열끼리 크기 비교는 숫자크기 비교하듯이 해주면 되기 때문에 편리하다.
하지만 여기에도 주의할 점은 비교하는 string이 길이가 다를 때 원하는 결과가 나오지 않을 수 있습니다.
ex) "12", "9" 를 비교하면 ("12" < "9")의 결과가 나옴.
이유는 사전식 비교를 하기 때문에 맨 앞에 있는 '1', '9'를 우선비교하고 '9'가 더 크기 때문에 뒷부분은 비교하지 않아도 "9"가 더 큰 것으로 판단
그렇기 떄문에 자리수를 동일하게 해서 비교를 해야 정확한 결과를 얻을 수 있습니다.
ex) "12", "09" → ("12" > "09")
비교하는 방법을 알았으니 t의 부분 문자열을 p와 크기를 비교하면 된다.
t의 부분 문자열은 substr(시작 인덱스, 크기)을 통해서 추출 후 p와 비교하면 완료
- t = "10203"
- p = "15"
를 풀어 쓰면 "10", "02", "20", "03"이 나오고 "15"와 비교하면 "20"을 제외한 나머지 3개가 작거나 같음을 알 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include <string> #include <vector> #include <cstring> #include <algorithm> using namespace std; int solution(string t, string p) { int answer = 0; int p_size = p.size(); int zero_pos = -1; for(int i = 0; i < t.size()-(p_size-1); i++) { string tmp = t.substr(i, p_size); if(tmp <= p) { answer++; } } return answer; } | cs |
↓↓↓↓↓↓ 유익했다면 하트 뿅 ♥ ↓↓↓↓↓↓
'프로그래밍 > 프로그래머스' 카테고리의 다른 글
| Lv2_[124 나라의 숫자, C++] 풀이 및 알고리즘 정리 - 프로그래머스 (0) | 2023.03.23 |
|---|---|
| Lv1_[개인정보 수집 유효기간, C++] 풀이 및 알고리즘 정리 - 프로그래머스 (0) | 2023.02.08 |
| Lv1_[3진법 뒤집기, C++] 풀이 및 알고리즘 정리 - 프로그래머스 (0) | 2023.01.16 |
| Lv1_[예산, C++] 풀이 및 알고리즘 정리 - 프로그래머스 (0) | 2023.01.15 |
| Lv1_[최소직사각형, C++] 풀이 및 알고리즘 정리 - 프로그래머스 (0) | 2023.01.14 |
댓글