[백준 4641] Doubles (C#, C++) - soo:bak
작성일 :
문제 링크
설명
각 테스트 케이스마다 여러 자연수가 주어질 때, 그중 리스트 안에 자신의 정확히 두 배인 수가 함께 있는 수의 개수를 구하는 문제입니다.
접근법
한 줄의 수들을 모두 읽어 집합에 넣은 뒤, 각 수에 대해 두 배 값이 집합에 있는지 확인하면 됩니다. 입력 줄의 끝은 0, 전체 입력의 끝은 -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
using System;
using System.Collections.Generic;
class Program {
static void Main() {
while (true) {
var parts = Console.ReadLine()!.Split();
if (parts[0] == "-1")
break;
var nums = new List<int>();
var set = new HashSet<int>();
foreach (var s in parts) {
var x = int.Parse(s);
if (x == 0)
break;
nums.Add(x);
set.Add(x);
}
var count = 0;
foreach (var x in nums) {
if (set.Contains(x * 2))
count++;
}
Console.WriteLine(count);
}
}
}
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
33
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
while (true) {
int x;
cin >> x;
if (x == -1)
break;
vector<int> nums;
unordered_set<int> st;
while (x != 0) {
nums.push_back(x);
st.insert(x);
cin >> x;
}
int count = 0;
for (int v : nums) {
if (st.count(v * 2))
count++;
}
cout << count << "\n";
}
return 0;
}