Leetcode - 858. Mirror Reflection

숲사람·2022년 8월 4일
0

멘타트 훈련

목록 보기
115/237

문제

정사각형방에 좌측 하단에서 레이져가 나온다. p와 q의 길이가 주어질때 해당 레이져가 어떤 모서리에 도달하는지 계산하라. (모든 input은 최종 모서리에 도달하는게 보장됨)

Input: p = 2, q = 1
Output: 2
Explanation: The ray meets receptor 2 the first time it gets reflected back to the left wall.

아이디어

  • Discussion을 참고해 아이디어를 얻었다.
  • 위의 도식표로 그림을 그려보면 규칙을 발견할 수 있다.
    • q가 짝수인경우 in 0 in 0 in 0 .. 반복됨
      • 여기서 p가 짝수인경우 in에, 홀수 인경우 0에 도달
    • q가 홀수 인경우 2 1 2 1 2 1 .. 반복됨.
      • p가 짝수 인경우 2에, 홀수인 경우 1에 도달.
  • 사전에 p와 q를 최대공약수로 나눈값으로 계산해야함.

해결

솔직히 이런 문제 코딩테스트 훈련용으로 좋은문제는 아니지만. 약간 수학 퀴즈 같은 느낌의 재미는 있는 문제다.

0 ms, faster than 100.00% of C

int mirrorReflection(int p, int q){
    /* 최대 공약수로 p , q 를 나눠주기 */
    int com = q;
    for (; com > 0; com--) {
        if (p % com == 0 && q % com == 0)
            break;
    }
    p = p / com;
    q = q / com;

    if (q % 2 == 0) {
        if (p % 2 == 0)
            return -1;
        else
            return 0;
    } else {
        if (p % 2 == 0)
            return 2;
        else
            return 1;
    }
}
profile
기록 & 정리 아카이브용

0개의 댓글