4641번: Doubles
문제 2~15개의 서로 다른 자연수로 이루어진 리스트가 있을 때, 이들 중 리스트 안에 자신의 정확히 2배인 수가 있는 수의 개수를 구하여라. 예를 들어, 리스트가 "1 4 3 2 9 7 18 22"라면 2가 1의 2배, 4가 2의 2배, 18이 9의 2배이므로 답은 3이다. 입력 입력은 여러 개의 테스트 케이스로 주어져 있으며, 입력의 끝에는 -1이 하나 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 2~15개의 서로 다른 자연수가 주어진다.
www.acmicpc.net
입력받은 숫자들을 전부 vector에 담아 2중 for문을 돌려도 정답은 쉽게 찾을 수 있겠지만, 효율성을 늘리기 위해 하나의 for문을 사용하는 쪽으로 구현하였다.
자연수의 최대값이 100을 넘지 않기 때문에 계수정렬을 이용하였고, for_each 함수를 사용하여 벡터에 담긴 모든 원소를 탐색하였다.
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
int numberCnt[101], result;
void Pred(const int a)
{
result += numberCnt[a*2];
}
int main(void)
{
vector<int> v;
while (1)
{
result = 0;
memset(numberCnt, 0, sizeof(numberCnt));
while (1)
{
int num;
cin >> num;
if (num == -1) return 0;
else if (num == 0) break;
v.push_back(num);
numberCnt[num]++;
}
for_each(v.begin(), v.end(), Pred);
v.clear();
cout << result << endl;
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
|
알고리즘 200일 프로젝트 - 32day
'알고리즘 > BOJ' 카테고리의 다른 글
백준 11729번: 하노이 탑 이동 순서 (0) | 2020.05.11 |
---|---|
백준 2966번: 찍기 (0) | 2020.05.06 |
백준 2858번: 기숙사 바닥 (0) | 2020.05.05 |
백준 1405번: 미친 로봇 (0) | 2020.05.03 |
백준 1213번: 팰린드롬 만들기 (0) | 2020.04.30 |