본문 바로가기
CS/Algorithm

프로그래머스 레벨3 - 숫자 게임 (C++)

by jeounpar 2023. 3. 16.

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

 

프로그래머스

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

programmers.co.kr

이 문제에서 가장 중요한 조건은

1. 각 사원은 딱 한 번씩 경기를 합니다.

2. A팀은 빠르게 출전순서를 정했다.

요 두개의 조건 이다.

A팀의 출전순서가 이미 정해져 있는 상태이므로 백터A와 벡터B를 각각 정렬하여 비교 할 수 있다.

정렬이 왜 가능하지?

-> 벡터A를 정렬했다고 해서 A팀의 출전순서가 바뀌는 것은 아니다. 단순히 벡터B와의 비교를 위해 각 사원의 자연수만을 정렬한 것이다.

'각 사원은 딱 한 번씩 경기를 합니다.' 이 조건은 왜 중요하지?

-> B팀의 입장에서는 무조건 이기는 경기만 하면 된다. 나머지 경기는 중요하지 않음. 결국, 이기는 경기만 정한 상태에서 나머지 경기는 지거나 무승부가 되도 상관없다.

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

int solution(vector<int> A, vector<int> B) {
  int answer = 0;
  sort(A.begin(), A.end());
  sort(B.begin(), B.end());
  int idx_a = 0;
  int idx_b = 0;
  while (idx_a < A.size() && idx_b < B.size()) {
    if (B[idx_b] > A[idx_a]) {
      answer++;
      idx_b++;
      idx_a++;
    } else {
      idx_b++;
    }
  }
  return answer;
}

ex) A : 5, 1, 3, 7    B : 2, 2, 6, 8

=> A : 1, 3, 5, 7     B : 2, 2, 6, 8

 

while 문

step 1)

idx_a = 0

idx_b = 0

A[idx_a] = 1, B[idx_b] = 2

answer = 0

 

step 2)

idx_a = 1

idx_b = 1

A[idx_a] = 3, B[idx_b] = 2

answer = 1

 

step 3)

idx_a = 1

idx_b = 2

A[idx_a] = 3, B[idx_b] = 6

answer = 1

 

step 4)

idx_a = 2

idx_b = 3

A[idx_a] = 5, B[idx_b] = 8

answer = 2

 

step 5)

idx_a = 3

idx_b = 4

A[idx_a] = 7, B[idx_b] = 

answer = 3

반복문 종료