1. 숫자 문자열과 영단어(2021 카카오 채용연계형 인턴쉽)
- 알고리즘 순서
1. 0-zero처럼 숫자-영어 map 생성
2. 답을 넣어놓을 string ans 추가
3. 문자를 순서대로 넣을 string str 생성
4.입력된 s를 돌면서 숫자는 그대로 ans에 넣고 문자는 str에 넣어 문자->숫자로 변경한 뒤 ans에 추가
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
int solution(string s) {
unordered_map<string, char> smap;
smap["zero"]='0';
smap["one"]='1';
smap["two"]='2';
smap["three"]='3';
smap["four"]='4';
smap["five"]='5';
smap["six"]='6';
smap["seven"]='7';
smap["eight"]='8';
smap["nine"]='9';
int answer = 0;
int idx=0;
string ans=""; // 정답
while(idx<s.size()){
if(s[idx]>='0'&&s[idx]<='9'){
ans.push_back(s[idx]);
idx++;
}else{
string str="";
while(s[idx]>='a'&&s[idx]<='z'){ // 문자면
str.push_back(s[idx++]); //str에 문자 넣기
if(smap[str]>='0' && smap[str]<='9')
break;
}
ans.push_back(smap[str]); // 숫자로 바꿔서 넣기
}
}
answer=stoi(ans);
return answer;
}
- 개선점
str에 문자를 넣고 숫자 구분하는 부분에서 break를 넣지 않고 바로 push_back을 해서 통과를 하지 못했다.
밑의 블로그로 break를 넣어 문제점을 해결함!
[프로그래머스] 숫자 문자열과 영단어 [문자열] - c++
https://programmers.co.kr/learn/courses/30/lessons/81301c++ 풀이(map)
velog.io
2. 크레인 인형뽑기(2019 카카오 개발자 겨울 인턴쉽)
- 알고리즘 순서
1. 바구니역할인 stack <int> basket 생성, 그리고 moves를 순서대로 돈다
1.1) moves가 1부터 시작한다고 설정하였기 때문에 따로 1부터 시작하는 정수변수를 생성하여 board의 열 부분에 사용한다
2. 동시에 board 순서대로 돈다
2.1) board에 0이 아니고 인형이 있는 경우
-> 1. basket이 비어있지 않고 basket의 top과 현재 board와 같으면 basket의 top을 삭제하고 delcnt(삭제 개수 cnt변수)에 +2를 해줌(비교하는 과정에서 추가로 들어가지 않았기 때문에 pop은 1번만, delcnt는 +2를 해준다
-> 2. 다르면 현재 board인형을 basket에 추가해주고, 다음 행,열로 넘어가야해서 break해줌
3. delcnt(정답) 출력하기
#include <string>
#include <vector>
#include <stack>
using namespace std;
int solution(vector<vector<int>> board, vector<int> moves) {
int delcnt = 0,cnt;
stack<int> basket; //바구니~
for(int m=0;m<moves.size();m++){
cnt=moves[m]-1; // 1부터 시작이라서
for(int i=0;i<board.size();i++){
//if(!board.empty()){
if(board[i][cnt]!=0){
if(!basket.empty() && basket.top()==board[i][cnt]){ // 바구니 맨 위와 현재 board와 같으면
basket.pop(); // 삭제
delcnt+=2; // 삭제된 갯수 cnt
}else{ // 다르면 추가
basket.push(board[i][cnt]);
}
board[i][cnt]=0; // basket에 추가했으므로 board에서 삭제 해줌
break; // 다음 열로 넘어가야해서 break 걸어주기
}
}
}
return delcnt;
}
- 개선점
계속 런타임 초과가 뜨길래 보니 if(!board.empty()) 부분이었다. 현재 체크하는 인형 위치가 비었는지 확인해야하는데 board를 비었는지 자꾸 확인해서 초과가 뜬것 같다 ㅎㅎ;
'코딩 > Programmers 알고리즘' 카테고리의 다른 글
| 백준 - 브론즈 (0) | 2023.05.17 |
|---|---|
| C++ Level1 - 나머지 문제들(?) 4 (0) | 2022.05.24 |
| C++ Level1 - 나머지 문제들(?) 2 (0) | 2022.05.20 |
| C++ Level1 - 나머지 문제들(?)1 (0) | 2022.05.18 |
| [C++] 월간 코드 챌린지 Level1 (0) | 2022.04.12 |