[C++] 체육복

2023. 10. 15. 18:19·[게임 개발] 알고리즘 공부/프로그래머스

링크

https://school.programmers.co.kr/learn/courses/30/lessons/42862#

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제

입출력 예제

코드

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int solution(int n, vector<int> lost, vector<int> reserve) {
    int answer = 0;    
    
    vector<bool> canLend(n, false);
    vector<bool> completed(n, false);

    answer = n - lost.size();

    // 여벌 체육복을 들고온 학생 체크
    for(int i = 0; i < reserve.size(); i++)
    {
        int targetPos = reserve[i] - 1;
        canLend[targetPos] = true;
    }
    
    // 도난당한 학생이 여별 체육복이 있다면 해당 체육복 사용
    // 다른 학생에게는 못 빌려줌
    for(int i = 0; i < lost.size(); i++)
    {
        int targetPos = lost[i] - 1;

        if(canLend[targetPos])
        {
            canLend[targetPos] = false;
            completed[targetPos] = true;
            answer++;
            continue;
        }
    }
    

    sort(lost.begin(),lost.end());    
    // 도난당한 학생에게 체육복을 빌려줄 수 있는지
    for(int i = 0; i < lost.size(); i++)
    {
        int targetPos = lost[i] - 1;
        
        if(completed[targetPos]) continue;

        if(canLend[targetPos - 1] && targetPos > 0)
        {
            canLend[targetPos - 1] = false;
            answer++;

        }
        else if(canLend[targetPos + 1] && targetPos < n - 1)
        {
            canLend[targetPos + 1] = false;
            answer++;
        }
    }
        
    return answer;
}

풀이

체육복을 잃어버린 사람 목록은 lost, 여분을 가지고 있는 사람 목록은 reserve 입니다.

 

lost와 reserve 둘 다 속해있을 수 있습니다. 둘 다 속해있을 경우 자신의 여분을 사용하기 때문에 다른사람에게
체육복을 건네줄 수 없습니다.

 

빌려줄 수 있는지 여부를 저장하는 canLend 라는 이름의 bool형 벡터와
물건을 잃어버렸지만 자신의 여분을 사용했음을 판단하기 위한 complete라는 이름의 bool형 벡터를 선언합니다.

 

reserve 벡터를 탐색해서 해당 벡터 목록에 존재하는 사람은 canLend를 true로 바꿔줍니다.


lost 벡터에 속해있는 사람 중 canLend가 true인 사람은 여분을 들고온 사람을 뜻하니

자신의 여분 체육복을 사용 했으므로 canLend를 false로 다시 바꿔주고,

lost 목록에는 있지만 자신의 체육복을 사용했음을 판단하기 위해 complete를 true로 바꿔줍니다.

 

이후 lost 목록을 반복문으로 탐색하여 complete가 true라면 continue로 넘기고,
자신의 인덱스의 앞 뒤 인덱스가 canLend가 true라면 체육복을 빌립니다.

 

저작자표시 (새창열림)

'[게임 개발] 알고리즘 공부 > 프로그래머스' 카테고리의 다른 글

[Level2] [C++] 큰 수 만들기  (0) 2024.01.12
[C++] 완주하지 못한 선수  (0) 2023.07.07
[C++] 2021 카카오 채용연계형 인턴십 - 숫자 문자열과 영단어  (0) 2023.06.24
[C++] 2018 KAKAO BLIND RECRUITMENT[1차] 비밀지도  (0) 2023.06.23
[C++] 가장 가까운 같은 글자  (0) 2023.06.22
'[게임 개발] 알고리즘 공부/프로그래머스' 카테고리의 다른 글
  • [Level2] [C++] 큰 수 만들기
  • [C++] 완주하지 못한 선수
  • [C++] 2021 카카오 채용연계형 인턴십 - 숫자 문자열과 영단어
  • [C++] 2018 KAKAO BLIND RECRUITMENT[1차] 비밀지도
람팜팜~
람팜팜~
:)
  • 람팜팜~
    RumPumPum
    람팜팜~
  • 전체
    오늘
    어제
    • 전체 (123)
      • 🎵 일상 (2)
      • JAVA (5)
        • 김영한의 자바 입문 (3)
      • JavaScript (12)
      • ---------------------------.. (0)
      • [게임 개발] 포트폴리오 (2)
        • RPG (1)
        • 슈터-플랫포머 (1)
      • [게임 개발] 개발 일지 (28)
        • RPG (25)
        • TopDownProject (3)
      • [게임 개발] 언리얼엔진 공부 (9)
        • 이득우의 언리얼 프로그래밍 Part.1 (6)
        • 이득우의 언리얼 프로그래밍 Part.2 (1)
        • 개인 메모 (2)
      • [게임 개발] 알고리즘 공부 (60)
        • 프로그래머스 (8)
        • 백준 (52)
        • 개인 메모 (0)
      • [게임 개발] CPP 공부 (2)
        • 이것이 C++ 이다 (1)
        • Effective C++ (0)
        • Effective Modern C++ (0)
        • 홍정모 그래픽스 새싹코스 (1)
      • [게임 개발] CS 공부 (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      브루트포스
      우선순위 큐
      context switching
      슬라이딩 윈도우
      데드락
      dfs
      해시
      dp
      문자열
      투포인터
      프로세스
      참조자
      역참조
      누적합
      메모리구조
      스레드
      그리디
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    람팜팜~
    [C++] 체육복
    상단으로

    티스토리툴바