🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/132265
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
👩💻 코드
#include <string>
#include <vector>
#include <map>
using namespace std;
int solution(vector<int> topping) {
int answer = 0;
map<long, long> firstPiece;
map<long, long> secondPiece;
for(int i=0; i<topping.size(); i++){
secondPiece[topping[i]]++;
}
int firstTopping = 0;
int secondTopping = secondPiece.size();
for(int i=0; i<topping.size(); i++){
if(firstPiece[topping[i]] == 0){
firstTopping++;
}
firstPiece[topping[i]]++;
secondPiece[topping[i]]--;
if(secondPiece[topping[i]] == 0){
secondTopping--;
}
if(firstTopping == secondTopping){
answer++;
}
}
return answer;
}
📝 풀이
⭐ 참고 : 윈도우 슬라이딩 기법 ⭐
2024.07.25 - [코딩테스트/프로그래머스] - [프로그래머스] 할인 행사
[프로그래머스] 할인 행사
🔗 문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/131127 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술
jjrdd.tistory.com
이 문제는 윈도우 슬라이딩 기법으로 풀 수 있습니다.
토핑을 key값으로 하고 같은 토핑일 경우 value값을 증가시키면 map의 size로 토핑 종류의 수를 알 수 있습니다.
첫 번째 조각은 아무 것도 없는 상태로, 두 번째 조각은 조각케이크 전체로 초기화합니다.
자르는 위치를 i라고 하고 첫 번째 조각에는 i의 토핑을 추가하고 두 번째 조각에는 i 토핑을 제거합니다.
첫 번째 조각에 토핑을 추가하기 전 존재 하지 않던 토핑이라면 토핑 종류 수를 증가시킵니다.
두 번째 조각에 토핑을 제거한 후 존재 하지 않는 토핑이 된다면 토핑 종류 수를 감소시킵니다.
두 조각의 토핑 종류 수가 같다면 answer을 증가시킵니다.
최종적으로 answer을 return합니다.
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 방문 길이 (0) | 2024.08.16 |
---|---|
[프로그래머스] 뒤에 있는 큰 수 찾기 (1) | 2024.08.16 |
[프로그래머스] 모음사전 (0) | 2024.08.15 |
[프로그래머스] [3차] 압축 (0) | 2024.08.14 |
[프로그래머스] 게임 맵 최단거리 (0) | 2024.08.14 |