반응형
<문제 소개>
<소스 코드 1> - for문 사용
#include <iostream>
using namespace std;
int main()
{
// 쓰레드 환경이 아닐때 버퍼를 분리하여 처리속도를 빠르게 해줌
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N;
cin >> N;
int output = 1;
for (int i = 1; i <= N; i++)
{
output *= 2;
}
cout << output;
return 0;
}
<소스 코드 2> - shift 연산 사용
#include <iostream>
using namespace std;
int main()
{
// 쓰레드 환경이 아닐때 버퍼를 분리하여 처리속도를 빠르게 해줌
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N;
cin >> N;
cout << (1 << N);
return 0;
}
<풀이과정>
1. 한 블록당 2개의 방향으로 내려갈 수 있다.
2. 블록이 한개라면 밑으로 내려오는 방법이 두가지이고, 두개라면 한개일 때 내려온 방향마다 2개의 방향으로 내려갈 수 있으므로 2x2가지 방법이 있다.
3. 이처럼 N번째 블록으로 내려오는 방법은 2를 N번 곱해서 구할 수 있다.
4. 따라서 2의 N제곱을 출력하면 된다.
<코멘트>
pow 함수를 썼더니 안되어서 그냥 for문으로 풀었다!
다른 분들 풀이를 보니 까먹고 있었던 shift연산을 이용하여 푼 풀이가 있어서 해당 풀이도 첨부했다!
<제출결과>
- pow 함수를 사용했을 때, 비쥬얼 스튜디오에서는 됐는데, 제출하니깐 맨 밑처럼 컴파일 에러가 뜨면서 틀리다고 나왔다.