algolab은 국민대학교 소프트웨어학부 수업에서 사용되는 온라인 저지?(과제 제출 사이트)입니다.
이전 주차들과 마찬가지로 4주차 과제 제출 기한이 끝났기 때문에, 한번 풀이를 작성해보겠습니다.
15. 패리티비트
파일 입출력에 관해서는 이전글에 남겨놨습니다.
-> 2020/04/14 - [KMU/algolab] - [KMU-algolab] c++ 프로그래밍 파일 입출력
이 문제는 int형보다는 unsigned int 자료형을 아는지 물어보는 문제다! 라는 느낌이 보자마자 강하게 왔었습니다.
왜냐하면, 32bit를 사용하면서, 맨 앞 비트(MSB)가 부호를 결정하게 되는 것이 아닌, MSB를 제외한 31자리에 있는 1의 개수가 짝수인지 홀수인지를 나타내야 했고, 이 결과를 음수로 출력하면 안 됐기 때문입니다.
아무튼, 일단 코드부터 보시죠.
#include <fstream>
#include <iostream>
using namespace std;
int tc,cnt;
unsigned int N,N2,z;
int main() {
ifstream in("input.txt");
z = 1<<31;
if (in.is_open()) {
in >> tc;
while(tc--) {
in >> N;
N2 = N;
cnt = 0;
while(N2 > 0) {
if(N2 %2 == 1) cnt++;
N2/=2;
}
if(cnt%2==0) {
cout << N << "\n";
}
else {
cout << N+z <<"\n";
}
}
}
return 0;
}
z라는 변수에는 1<<31을 넣어놨습니다. 한마디로, 1뒤에 0이 31개 나열된 이진수를 넣었습니다.
그리고 나서, 각 케이스별로 N을 입력받았고, 1의 개수를 세준 뒤, 1의 개수의 짝수 여부에 따라 z의 덧셈 여부를 결정했습니다. (z를 왜 더하기만 하면 되는지는 문제 조건과 함께 몇 가지 예제들을 직접 끄적여보시면 이해하실 것 같습니다.)
16. 소수
따로, 많은 설명이 필요없을 것 같습니다.
단지 N이라는 숫자가 소수인지를 판단할 때, 2부터 sqrt(N)까지만의 범위만으로 숫자로 나누었을 때, 나머지가 0인지 판단하면 된다는 사실만 기억하시면 될 것 같습니다.
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int tc;
int N;
int main() {
ifstream in("input.txt");
if (in.is_open()) {
in >> tc;
while(tc--) {
in >> N;
bool chk = true;
for(int x=2; x*x <= N; x++) {
if(N%x==0) {
cout << 0 << "\n";
chk = false;
break;
}
}
if(chk) cout << 1 << "\n";
}
}
return 0;
}
17. 다각형면적
이 문제도,문제 지문에 겁내지 않으면 바로 해결할 수 있었습니다.
이미, 다각형에 포함되어 있는 점들은 시계방향 혹은 반시계방향으로 정렬되어기 때문에 문제에 주어진 공식을 바로 활용하면 됩니다. 단, 계산을 할 때, 0번째 점과 n-1번째 점도 이어져 있다는 사실을 잊으면 안됩니다.
#include <iostream>
using namespace std;
int tc;
int n;
int x[110],y[110];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> tc;
while(tc--) {
int s = 0;
cin >> n;
for(int i=0; i<n; i++) {
cin >> x[i] >> y[i];
}
for(int i=0; i < n; i++) {
s += (x[i] + x[(i+1)%n]) * (y[(i+1)%n]-y[i]);
}
if(s < 0) {
cout << -s << " -1\n";
}
else {
cout << s << " 1\n";
}
}
}
이번주차는 저번주차에 비해 쉬웠던 것 같네요.

아무튼,
Rmx
'KMU > algolab' 카테고리의 다른 글
[KMU - algolab] c++ 프로그래밍 week 6 과제 풀이 (0) | 2020.05.04 |
---|---|
[KMU - algolab] c++ 프로그래밍 week 5 과제 풀이 (0) | 2020.04.27 |
[KMU - algolab] c++ 프로그래밍 파일 입출력 (5) | 2020.04.14 |
[KMU - algolab] c++ 프로그래밍 week 3 과제 풀이 (0) | 2020.04.13 |
[KMU - algolab] c++ 프로그래밍 week 2 과제 풀이 (2) | 2020.04.06 |