본문 바로가기

Algorithm/Implementation

(C++) - 백준(BOJ) 8815 : Test

반응형

https://www.acmicpc.net/problem/8815

 

8815번: Test

Hektor lubi kartkówki w formie testów w których każde pytanie ma cztery możliwe odpowiedzi ( A, B, C lub D ). Kiedy nie zna prawidłowych odpowiedzi, zamiast strzelać, zaznacza odpowiedzi według schematu: W pierwszym zadaniu odpowiedź A W drugim za

www.acmicpc.net

단순 구현 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

테스트 케이스 수 z, 답변의 수 n을 선언하고 입력받습니다. 대답할 정답 문자들을 일차원 배열 answers로 선언해 저장해줍니다.

📔 풀이과정

n이 10억이기 때문에 단순 simulation으로는 시간초과를 받기 때문에 적절한 공식을 찾아야 합니다.

'A'에서 시작해서 다음 문자 -> 다음 문자 -> 이전 문자로 대답을 하는 패턴이므로 3의 배수를 단위로 다음 문자로 대답을 한다는 것을 알 수 있습니다.

다음 문자로 이동하는 횟수 = (n-1) / 3를 지역변수 moved를 선언해 저장해줍니다.

남은 이동 횟수 = (n-1) % 3 입니다. 이를 지역변수 movedLeft를 선언해 저장해줍니다.

다음 문자로 이동하는 총 이동 횟수 = moved + movedLeft이므로 이를 4로 나눈 나머지 값이 최종 답이 됩니다.

📔 정답출력

answers[(moved + movedLeft) % 4]를 출력해줍니다.


📕 Code

#include <bits/stdc++.h>
using namespace std;
int z, n;
char answers[4] = {'A', 'B', 'C', 'D'};

int main(){
    cin >> z;
    while(z--){
        cin >> n;
        int moved = (n-1) / 3;
        int movedLeft = (n-1) % 3;
        cout << answers[(moved + movedLeft) % 4] << '\n';
    }
}