Problem Solving/BOJ

[백준 / BOJ] C++ 27467 수학 퀴즈

nageune 2023. 2. 12. 18:15
728x90
반응형

27467번: 수학 퀴즈

 

문제

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

 

27467번: 수학 퀴즈

문제에서 설명한 두 실수 $p$, $q$를 출력한다. 단, 정답과의 절대/상대 오차는 $10^{-9}$까지 허용한다.

www.acmicpc.net

 

 

풀이

복소근에 대한 개념을 알고 있다면 쉽게 풀 수 있는 문제.

x^2+x+1=0의 한 복소근 w이므로 w^3 = 1, w^2 = -w-1이다. 따라서 3의 N승일 때, N을 3으로 나눈 나머지로 바꾸어 계산해도 된다.

 

이후엔 pw + q 의 형태로 계산하여 p와 q를 출력하면 된다.

 

 

코드

#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  int n;
  double p = 0, q = 0;
  cin >> n;
  while (n--) {
    int x;
    cin >> x;
    if (x > 3) {
      x %= 3;
    }
    if (x == 1) {
      p++;
    } else if (x == 2) {
      p--;
      q--;
    } else {
      q++;
    }
  }
  cout.precision(10);
  cout << fixed << p << ' ' << q << '\n';
  return 0;
}

 

728x90
반응형