| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- solved class 2
- 백준 C++
- 유니티
- C++
- unity3d게임만들기
- 백준코딩테스트
- c++ solved.ac
- 티스토리챌린지
- 리그오브레전드턴제게임
- 백준 c++ 공부
- 바킹독
- c#코딩기초트레이닝
- 백준
- 오블완
- 백준 구현문제
- c++ 백준
- Unity
- unity게임만들기
- c#기본문법
- unity게임
- c#코테
- unity3dservival
- c#기초문법
- 유니티서바이벌게임만들기
- 백준코테
- c#
- 바킹독알고리즘
- C#문법
- 유니티게임만들기
- 유니티공부
- Today
- Total
나 개발자 진짜 되냐?
코딩테스트 입문 - 옹알이 (1) ( replace, erase, remove ) 본문

예전에는 책을 가까이 두지 않았다.
음...
책보다는 영화가 몰입이 더 쉬웠던 거 같고..
책을 오랫동안 앉아서 보는 게 어려웠다.
최근에
누가 나에게
다정함은 체력에서 오는 거라고 흘려 이야기했었다.
사실 반은 믿지 않았다.
다정함은 몸에 밴 행동이라고 생각했다.
걷다 보면
상대가 추워 보이는 게 눈에 보이고
그럼 내 옷을 벗어주고 싶기 마련이니까
근데 며칠 전에 도서관에서

이 책을 발견했다.
피곤하면 타인을 배려할 여유도 사라지기 때문에
'다정함은 체력에서 나온다'는 말이 핫해졌다고 한다.
다정함은 체력이고 배려는 지능이다
라는 말을 보며..
나는 꽤 지능이 높은 사람이구나
라는 생각을 했다 ㅎ
다음에 시간이 나면
읽어보고 싶은 1순위 책이 되었다.

find으로 찾으면 좋지만..
문제는 uuuma의 경우
u는 3개 찾을 수 있지만..
a가 하나 부족하기 때문에 답이 될 수 없다.
이러면 사실 소거법이 가장 좋지 않나?라는 생각이 든다.
인지 씨에게 도움을 요청했다.
소거법을 하면 문제가 발생한다고
예시 1번에서 wyeoo 를보고
만약에 ye를 지우면
woo가 되어서 둘 다 소거가 된다는 것이다.
사실 안되는 건데 말이다.
그래서 이 친구는 소거가 아니라 replace 하라고 했다.
replace
어디서부터 몇 글자를 지우고 뭘 넣을지
정확하게 숫자로 알려줘야 한다!
그래서 우리는 시작위치를 알아야 한다.
아마 find로 찾아서
그 위치를 int로 받으면 될 것이다.
int pos = a.find(b);
몇 글자를 지우는 것은
b의 길이만큼 지워야겠죠.
b.length()
우리는 " " 빈통으로 바꾸기로 했으니
" "
a.replace( pos, b.length(), " " )
이렇게 하면 된다.
자, 이렇게 돌면
같은 단어들은 공백으로 변신해 있을 것이다.
그 공백을 2중 포문으로 해서
char로 하나씩 돌면서 공백이 아닌 게 하나라도 있으면 걘 거르고
공백들 뿐이면 ++ 해주는 방식
이 있고
너무 길어서 귀찮다고 말했더니
그럼 공백을 다 erase + remove 해주고 empty로 찾자고 알려주었다.
remove
앞으로 옮긴다. 당긴다 라는 뜻
remove( 시작 위치, 끝나는 위치, 찾을 목표물 );
로 이루어져 있고
보통 시작 위치와 끝나는 위치는
begin, end이다.
이 문제에서는
공백을 찾아야 하니까 공백을 찾는다.
여기서 중요한 게
공백을 지워주는 느낌이 아니다.
공백을 제외한 다른 단어들을 앞으로 다 당겨주고
나머지들은 맨 뒤로 당겨둔다.
그래서 맨뒤에는
공백이랑 마지막 값 등 여러 쓰레기값이 들어가 있다.
remove는 쓰레기 값 바로 앞까지의 위치를 반환한다.
아 이해하는데 백만 년걸렸... 네...;
erase
어디서부터 몇 글자 자를까?라는 뜻
이 문제에서는
remove로 쓰레기 앞까지 위치를 받았으니
거기서부터 end까지 싹 둑 해준다.
str.erase( remove( str.begin(), str.end(), ' ') , str.end() );
이 문장은 오래오래 기억하도록 하자.
그리고 뭐 마지막엔
if(a.empty) answer++;
해주면 끝!

아니 그러더니 갑자기 왕 쉬운 방법이 있다고 알려주었다.

find로 글자를 찾고
글자 수만 어딘가에 저장한다.
그다음에 다 돌고 나서
babbling 에있는 글자 길이랑 내가 저장한 글자수가 같으면 그냥 cnt++ 해주면 된다.
for(auto& a : babbling) {
int total_len = 0;
for(auto& b : s) {
if(a.find(b) != string::npos) {
total_len += b.length();
}
}
if(total_len == a.length()) {
answer++;
}
}
이렇게..!

이렇게 많이 알고리즘을 썼는데..!!
1점이라니
서운하네
replace, remove, erase를 배웠다.
erase는 어디서부터 어디까지 지운다. 값 2개 필요
remove는 목표물을 빼고 다 앞으로 당긴다. 범위 2개 + 목표물 1개 값 3개 필요
replace는 어디서부터 몇 글자를 다른 값으로 바꾼다. 값 3개 필요
잊지 말자.
earse와 remove를 잘 활용하는 날이 오길
'프로그래머스를 풀어보아요! > C++' 카테고리의 다른 글
| 코딩테스트 입문 - 로그인 성공? ( map, count() ) (0) | 2026.05.20 |
|---|---|
| 코딩테스트 입문 - 등수 매기기 ( 등수 + 1 ) (0) | 2026.05.20 |
| 코딩테스트 입문 - 유한소수 판별하기 ( 기약분수, 2&5, gcd ) (0) | 2026.05.19 |
| 코딩테스트 입문 - 겹치는 선분의 길이 ( 도화지 채우기 ) (0) | 2026.05.19 |
| 코딩테스트 입문 - 평행 ( 기울기 구하는 법 ) (0) | 2026.05.19 |
