N
(프로그래머스 c++) 숫자 짝꿍 본문
https://school.programmers.co.kr/learn/courses/30/lessons/131128
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
map을 이용한 문제 풀이.
주어진 두 string x,y를 순회해서 숫자가 몇개씩 존재하는지 x,y map에 각각 저장하는 방식으로 생각했다.
문제풀이)
1. x,y string을 순회하면서 카운팅 할 xMap, yMap을 fillMap 함수를 통해서 각 맵에 카운팅을 한다.
2. 맵을 모두 채웠으면 0~9까지의 수를 채울 수 있는 만큼 answer에 채우면 된다.
xVal과 yVal은 각 맵에 저장되어 있는 숫자의 카운트를 뜻한다.
즉, key = i(0 ~ 9), value = i에 해당하는 value가 된다.
xVal과 yVal이 모두 0보다 크면 answer에 추가할 수 있는 첫번째 조건이 된다.
answer을 채울 수 있는 조건은 xVal과 yVal 중 최소값 만큼 채울 수 있다.
to_string()을 이용해서 현재 i 값을 answer에 min(xVal, yVal) 만큼 채워준다.
또한, 해당 if문에는 isGreaterThanZero 라는 bool 변수를 업데이트 한다.
이 변수는 answer가 0밖에 없는지 확인하는 flag다.
for문을 모두 순회하면 early return을 할 수 있는지 확인한다.
isGreaterThanZero가 false 인 경우, "0" or "-1"을 리턴할 수 있다.
answer의 size를 확인해서 0인 경우 "-1"을 리턴, 그렇지 않다면 "0"을 리턴해준다.
early return의 조건이 아니라면 현재 채워진 answer을 reverse 해서 값을 리턴하면 답이 된다.
#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <cmath>
using namespace std;
void fillMap(string s, map<int, int>& m) {
for (auto i = 0; i < s.size(); i++) {
auto num = s[i] - '0';
if (m.find(num) == m.end()) {
m[num] = 1;
} else {
m[num]++;
}
}
}
string solution(string X, string Y) {
string answer = "";
bool isGreaterThanZero = false;
map<int, int> xMap;
map<int, int> yMap;
fillMap(X, xMap);
fillMap(Y, yMap);
for (int i = 0; i <= 9; ++i) {
int xVal = (xMap.find(i) != xMap.end()) ? xMap[i] : 0;
int yVal = (yMap.find(i) != yMap.end()) ? yMap[i] : 0;
if (xVal > 0 && yVal > 0) {
int xyMin = min(xVal, yVal);
for (int j = 0; j < xyMin; ++j) {
answer += to_string(i);
}
isGreaterThanZero = i > 0;
}
}
if (!isGreaterThanZero) {
return answer.size() ? "0" : "-1";
}
reverse(answer.begin(), answer.end());
return answer;
}'프로그래머스 알고리즘 > 0 & 1단계' 카테고리의 다른 글
| (프로그래머스 c++) 콜라 문제 (0) | 2025.10.09 |
|---|---|
| (프로그래머스 c++) 삼총사 (0) | 2025.10.09 |
| (프로그래머스 c++) [PCCP 기출문제] 1번 / 동영상 재생기 (1) | 2025.08.02 |
| (프로그래머스 C++)상자 꺼내기 (3) | 2025.07.27 |
| (프로그래머스 c++) [PCCE 기출문제] 5번 / 심폐소생술 (0) | 2025.07.26 |