www.acmicpc.net/problem/13458

 

13458번: 시험 감독

첫째 줄에 시험장의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 각 시험장에 있는 응시자의 수 Ai (1 ≤ Ai ≤ 1,000,000)가 주어진다. 셋째 줄에는 B와 C가 주어진다. (1 ≤ B, C ≤ 1,000,000)

www.acmicpc.net

1. 풀이방법

 

- 그냥 구현 문제입니다.

 

- "오직" 이라는 말이 약간 헷갈린다는 정도? 결국 모든 시험장에 총감독관은 1명 있어야 한다는 말입니다.

 

 

 

2. 주의사항

 

- 시험장이 최대 1,000,000 개 시험장당 응시자가 최대 1,000,000 입니다.

 

- 총,부 감독관 모두 1명씩만 감시가능 하다고 생각하면 1,000,000,000,000명이 필요할 수 있습니다.

 

- INT형으로는 부족 long long 자료형을 사용했습니다.

 

 

 

3. 나의코드

 

#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;

int N;
int B, C;
long long resultcount = 0;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);

	cin >> N;
	vector<int> examarea(N);
	for (int i = 0; i < N; i++) cin>>examarea[i];
	cin >> B >> C;

		for (int i = 0; i < N; i++) {
			resultcount++;
			examarea[i] -= B;
			if (examarea[i] <= 0) continue; //총 감독관 혼자 감시 가능
			else { 
				if (examarea[i] % C == 0) resultcount += (examarea[i] / C);
				else resultcount += ((examarea[i] / C) + 1); }
		}

	cout << resultcount << "\n";
	return 0;
}

'알고리즘 문제풀이 > 구현' 카테고리의 다른 글

백준 20056 [C++]  (0) 2020.12.23
백준 20055 [C++]  (0) 2020.12.23
백준 15685 [C++]  (0) 2020.12.08
백준 17144 [C++]  (0) 2020.12.08
백준 14499 [C++]  (0) 2020.12.08

www.acmicpc.net/problem/2609

 

2609번: 최대공약수와 최소공배수

첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.

www.acmicpc.net

1. 풀이방법

 - 유클리드 호제법을 이용한 최대공약수 , 최대공배수 구하는 문제입니다.

 

2. 나의코드

#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;

int GCD(int n1, int n2) {
	if (n2==0) return n1;
	return GCD(n2, n1%n2);
}
int LCM(int n1, int n2) {
	return n1 * n2 / (GCD(n1, n2));
}


int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);

	int num1, num2;
	cin >> num1 >> num2;
	cout << GCD(num1, num2) <<"\n"<<LCM(num1,num2)<<"\n";

	return 0;
}

'알고리즘 문제풀이 > 수학' 카테고리의 다른 글

백준 1837 [C++]  (0) 2021.01.19

 

www.acmicpc.net/problem/2033

 

2033번: 반올림

정수 N이 주어져 있을 때 이 수가 10보다 크면 일의 자리에서 반올림을 하고, 이 결과가 100보다 크면 다시 10의 자리에서 반올림을 하고, 또 이 수가 1000보다 크면 100의 자리에서 반올림을 하고.. (

www.acmicpc.net

1. 풀이 방법

- 문제를 잘 읽고 뒷자리 수부터 차례대로 반올림을 실행하시면 됩니다.

 

2. 주의 사항

- 문제를 잘읽읍시다. (전.. 제대로 안읽어서 제일 앞자리 다음 수 (두번쨰자리수) 에서만 반올림 하게 짰다가 그게 아니더라구요);; 귀찮;; 

 

3. 나의 소스

#include<iostream>
using namespace std;

int N;
int initnum=10;
int tmp;

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin>>N;
    while(N/initnum!=0){
        if(N%initnum>=5*(initnum/10)){
                N+=initnum*1;
                tmp=(N%initnum)/(initnum/10);
                N-=(tmp*(initnum/10));
        }
        else {
            tmp=(N%initnum)/(initnum/10);
            N-=(tmp*(initnum/10));
            }
        initnum*=10;
    }
    cout<<N<<"\n";
    return 0;
}

 

'알고리즘 문제풀이 > 구현' 카테고리의 다른 글

백준 14891 [C++]  (0) 2020.12.06
백준 2840 [C++]  (0) 2020.12.06
백준 14890 [C++]  (0) 2020.10.21
백준 17406 [C++]  (0) 2020.10.18
백준 15686 [C++]  (0) 2020.10.17

+ Recent posts