이 영역을 누르면 첫 페이지로 이동
Arc 블로그의 첫 페이지로 이동

Arc

페이지 맨 위로 올라가기

Arc

[Baekjoon] 6064: 카잉 달력

  • 2023.03.18 14:41
  • Algorithm/PS
글 작성자: SeoArc

문제

1 1 부터 시작하여 각각 m과 n에 대한 모듈로 연산을 진행하여 x y가 될 때 까지 몇번이 걸리는지 구하는 문제이다.

 

풀이

내 풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Q6064 {

    private static StringBuilder sb;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        sb = new StringBuilder();

        int t = Integer.parseInt(br.readLine());
        for (int i = 0; i < t; i++) {
            String[] nmxy = br.readLine().split(" ");
            int m = Integer.parseInt(nmxy[0]);
            int n = Integer.parseInt(nmxy[1]);
            int x = Integer.parseInt(nmxy[2]);
            int y = Integer.parseInt(nmxy[3]);
            int gcd;
            if (m > n) {
                gcd = gcd(m, n);
            } else {
                gcd = gcd(n, m);
            }
            int lcm = m * n / gcd;

            int tempx = x;
            int tempy = x;
            boolean seek = false;
            while (tempx <= lcm) {
                tempy = tempx % n == 0 ? n : tempx % n;
                if (tempy == y) {
                    seek = true;
                    break;
                }
                tempx += m;
                tempy %= n;
            }

            sb.append(seek ? tempx : -1).append("\n");
        }

        System.out.print(sb);
    }

    public static int gcd(int a, int b) {
        if (b == 0) {
            return a;
        }
        return gcd(b, a % b);
    }
}

시간을 줄일 방법이 생각나지 않아 결국 검색을 통해 해결했다.

아이디어는 초기 값이 x인 두 수 a, b를 놓고 a와 b를 m만큼 계속 증가시켜주며 b를 n에 대한 모듈로 연산을 통해 y와 같을 때까지 찾아 나가는 것이다.

 

예를 들어 m, n, x, y가 각각 10 12 3 9 라고 하면

a = 3, b = 3부터 시작하여

a = 13, b = 13 % 12 = 1

a = 23, b = 11 % 12 = 11

a = 33, b = 21 % 12 = 9

로 a가 33일때 b의 값이 y와 같아진 것을 확인할 수 있다.

 

단, a의 수가 두 수의 최소공배수를 넘어가면 없는 것으로 체크하고 -1을 출력한다.

 

회고

시간을 줄일 아이디어를 떠올리는 것이 아직 너무 어려운 것 같다.

많은 문제를 풀어보며 효율적인 알고리즘에 대해 좀 더 신경 써야될 것 같다.

저작자표시 (새창열림)

'Algorithm > PS' 카테고리의 다른 글

[Baekjoon] 11401: 이항 계수 3  (0) 2023.03.30
[Baekjoon] 1629: 곱셈  (0) 2023.03.21
[Baekjoon] 17626: Four Squares  (0) 2023.03.17
[Baekjoon] 1654: 랜선 자르기  (0) 2023.03.11
[Baekjoon] 1167: 트리의 지름  (0) 2023.03.08

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [Baekjoon] 11401: 이항 계수 3

    [Baekjoon] 11401: 이항 계수 3

    2023.03.30
  • [Baekjoon] 1629: 곱셈

    [Baekjoon] 1629: 곱셈

    2023.03.21
  • [Baekjoon] 17626: Four Squares

    [Baekjoon] 17626: Four Squares

    2023.03.17
  • [Baekjoon] 1654: 랜선 자르기

    [Baekjoon] 1654: 랜선 자르기

    2023.03.11
다른 글 더 둘러보기

정보

Arc 블로그의 첫 페이지로 이동

Arc

  • Arc의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (106)
    • Language (28)
      • C++ (0)
      • C# (0)
      • Java (28)
    • Algorithm (47)
      • Algorithm (15)
      • Data Structure (6)
      • PS (26)
    • Computer Science (22)
      • Design Pattern (1)
      • Network (14)
      • OS (7)
    • Game (0)
      • Unity (0)
    • Backend (3)
      • Spring (1)
      • JPA (2)
    • DB (0)
      • SQL (0)
    • DevOps (2)
      • AWS (0)
      • Docker (2)
      • Jenkins (0)
      • Nginx (0)
    • Software Engineering (4)
      • OOP (4)
    • AI (0)
      • Machine Learning (0)
    • Others (0)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 알고리즘
  • algorithm
  • 네트워크
  • 자바
  • 그래프
  • graph
  • java
  • network

나의 외부 링크

정보

SeoArc의 Arc

Arc

SeoArc

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © SeoArc. Designed by Fraccino.

티스토리툴바