문제 풀기 전 생각 :
문제를 풀기전에 문제를 정독했다.
조건이 여러개라 복잡해보이지만
자세히 들여다보면 생각보다 쉬운 문제이다
조건문을 여러개 써야 할 것 같지만
2의 배수는 2의 배수끼리 같은 방식으로 열어야 하며
3의 배수 또한 3의 배수끼리 같은 방식으로 열어야 한다
그리고 연속으로 같은 방식으로 열수 없다.
그럼 2번째 문과 3번째 문을 여는 방법은 달라야만 한다.
하지만 2와 3의 배수중 6이 둘 모두에게 속한다.
그러니 문의 갯수가 5개를 넘는다면
love is open door를 출력하면 된다
#include <iostream>
using namespace std;
int main() {
int num,first;
cin >> num;
cin >> first;
if(num > 5) cout << "Love is open door" << endl;
else {
for(int i=0 ; i < num-1 ; i++){
if(first == 0) {
cout << "1" << endl;
first = 1;
}
else {
cout << "0" << endl;
first = 0;
}
}
}
return 0;
}
https://www.acmicpc.net/problem/17210
17210번: 문문문
첫째 줄에 총 문의 개수 N(2 ≤ N ≤ 2,500,000,000)이 주어진다. 둘째 줄에는 유신이가 첫 번째 문을 통과할 때 문을 연 방법이 주어진다. 밀어서 여는 법은 숫자 0, 당겨서 여는 법은 숫자 1로 표기된
www.acmicpc.net
풀 때 어려웠던 점 또는 느낀점 :
이번 문제는 침착하게 문제를 잘 읽어 실수 없이
바로 통과할 수 있었다
워낙 성격이 급해서 신중하게 문제를 잘 읽어야겠다
개선방안 :
#include <cstdio>
int main() {
long n, a;
scanf("%ld%ld", &n, &a);
if (n < 6) {
for (int i = 2; i <= n; ++i) {
a ^= 1;
printf("%ld\n", a);
}
} else {
printf("Love is open door\n");
}
return 0;
}
문제에 대한 접근방식은 내가 푼 것과 유사하지만
0에서 1로
1에서 0으로 바꾸는 과정을
위의 코드의 주인은 한 줄로 해결했다
a ^= 1;
참 보자마자 평소에 잘 사용하지 않는 연산자이다 보니
저게 뭔가 싶었다 그리고 공부를 해보니
XOR 라는 이항 비트 연산자 라는 해답을 찾을 수 있었다.
첫번째 문이 0이라면 0^1 이니 1이 되고1에서는 1^1이 되니 0 되는 것이다.
분명 수업에서 배우긴 했는데확실히 사용을 하지 않으면 까먹는것 같다.이 연산자도 앞으로 애용해야 겠다.
#include <iostream>
using namespace std;
int main() {
int num,first;
cin >> num;
cin >> first;
if(num > 5) cout << "Love is open door" << endl;
else {
for(int i=0 ; i < num-1 ; i++){
first ^= 1;
cout << first << endl;
}
}
return 0;
}
개선방안을 보고 나의 코드를 조금 변경해보았다
좋은 도구 하나 건졌다.
댓글