작성일 :

문제 링크

5102번 - Sarah’s Toys

설명

사라가 가진 장난감 총수와 그날 방에 돌아오지 않은 장난감 수가 주어집니다. 방에 남은 장난감을 최대한 2개씩 짝짓고, 남으면 한 번만 3개짜리 그룹을 만들 수 있습니다.

각 줄마다 쌍의 개수와 3개 그룹 여부를 출력하는 문제입니다.


접근법

먼저, 방에 남은 장난감 수를 계산합니다. 총수에서 돌아오지 않은 수를 뺍니다.

다음으로, 남은 장난감이 2개 미만이면 쌍도 3개 그룹도 만들 수 없습니다. 남은 수가 짝수라면 모두 2개씩 짝지으면 됩니다.

이후, 남은 수가 홀수이고 3개 이상이면 3개짜리 그룹을 하나 만들고 나머지를 2개씩 짝짓습니다. 1개만 남으면 아무것도 만들 수 없습니다.


Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System;

namespace Solution {
  class Program {
    static void Main(string[] args) {
      while (true) {
        var parts = Console.ReadLine()!.Split();
        var n = int.Parse(parts[0]);
        var m = int.Parse(parts[1]);
        if (n == 0 && m == 0)
          break;

        var cnt = n - m;
        var pairs = 0;
        var group3 = 0;

        if (cnt >= 2) {
          if (cnt % 2 == 0) {
            pairs = cnt / 2;
          } else {
            if (cnt >= 3) {
              pairs = (cnt - 3) / 2;
              group3 = 1;
            }
          }
        }

        Console.WriteLine($"{pairs} {group3}");
      }
    }
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  while (true) {
    int n, m; cin >> n >> m;
    if (n == 0 && m == 0)
      break;

    int cnt = n - m;
    int pairs = 0, group3 = 0;

    if (cnt >= 2) {
      if (cnt % 2 == 0) {
        pairs = cnt / 2;
      } else {
        if (cnt >= 3) {
          pairs = (cnt - 3) / 2;
          group3 = 1;
        }
      }
    }

    cout << pairs << " " << group3 << "\n";
  }

  return 0;
}