99클럽 코테 스터디 2일차 TIL + 유클리드호제법/GCD

2024. 7. 23. 19:03·Algorithm/99클럽 코테 스터디
728x90
반응형

💡문제

[level 2] 숫자 카드 나누기 - 135807

문제 링크

성능 요약

메모리: 124 MB, 시간: 34.15 ms


 

🤔접근법

문제 요약

  • 배열 A의 정수들을 모두 나눌 수 있는 숫자 a는 배열 B의 정수를 하나도 나눌 수 없다.
  • 배열 B의 정수들을 모두 나눌 수 있는 숫자 b는 배열 A의 정수를 하나도 나눌 수 없다.
  • 숫자 a와 b중 큰거를 출력

범위 체크 및 시간복잡도 예상

  • 1 ≤ 배열의 길이 ≤ 500,000
  • 1 ≤ 배열의 원소 ≤ 1,000,000
  • O($N$) 이하.

풀이법

⭕ 접근 방법. 유클리드 호제법

  1. 배열 A의 최대 공약수를 구한다.
  2. 배열 B의 최대 공약수를 구한다.
  3. 배열 A의 최대 공약수가 배열 B의 원소 중 하나라도 나눌 수 있는지 확인한다.
  4. 배열 B의 최대 공약수가 배열 C의 원소 중 하나라도 나눌 수 있는지 확인한다.

➡️ 해당 풀이법의 시간 복잡도 : $O(NlogN)$ 을 넘는거 같은데.. 이게 왜.. 돌아가냐


🤯FAIL

답을 봐서 문제를 푼 경우

  • 유클리드 호제법을 사용해야한다는 것은 생각하고 있었는데
  • 내가 생각하는 풀이가 시간복잡도가 계속 넘어가는거 같아서 풀이의 갈피를 못잡고 결국 답을 봤다
  • 유클리드 호제법.. 을 확실히 이해하지 못해서 이전에 써두었던 코드를 가져왔다
  • 정수론 너무 어렵다
  • 다시 공부하는걸로

👩‍💻 코드

import java.io.*;
import java.util.*;

class Solution {
    public int solution(int[] arrayA, int[] arrayB) {
        
            int answer = 0;
            // arrayA의 최대 공약수 구하기 -> gcdA
            int gcdA = 0;
            for (int i = 0; i < arrayA.length; i++) {
                gcdA = GCD(gcdA, arrayA[i]);
            }

            // arrayB의 최대 공약수 구하기 -> gcdB
            int gcdB = 0;
            for (int i = 0; i < arrayB.length; i++) {
                gcdB = GCD(gcdB, arrayB[i]);
            }

            // gcdA로 arrayB의 원소들 중 나눠지는 원소가 있는지 확인
            for (int i = 0; i < arrayB.length; i++) {
                if(arrayB[i] % gcdA == 0){
                    gcdA = 0;
                    break;
                }
            }

            // gcdB로 arrayA의 원소들 중 나눠지는 원소가 있는지 확인
            for (int i = 0; i < arrayA.length; i++) {
                if(arrayA[i] % gcdB == 0){
                    gcdB = 0;
                    break;
                }
            }

            // gcdA와 gcdB 중에 큰 수
            answer = Math.max(gcdA, gcdB);

            return answer;
        }

        private static int GCD(int a, int b) {
            if (b == 0){
                return a;
            }
            return GCD(b, a % b);
        }
}

 

반응형

'Algorithm > 99클럽 코테 스터디' 카테고리의 다른 글

99클럽 코테 스터디 6일차 TIL + Arrays.sort/[프로그래머스] 테이블 해시 함수  (0) 2024.07.27
99클럽 코테 스터디 5일차 TIL + HashMap/[프로그래머스] 베스트앨범  (0) 2024.07.27
99클럽 코테 스터디 4일차 TIL + 문자열/[프로그래머스] 문자열 압축  (0) 2024.07.25
99클럽 코테 스터디 3일차 TIL + [프로그래머스] 숫자 문자열과 영단어  (0) 2024.07.24
99클럽 코테 스터디 1일차 TIL + 배열/스택  (2) 2024.07.22
'Algorithm/99클럽 코테 스터디' 카테고리의 다른 글
  • 99클럽 코테 스터디 5일차 TIL + HashMap/[프로그래머스] 베스트앨범
  • 99클럽 코테 스터디 4일차 TIL + 문자열/[프로그래머스] 문자열 압축
  • 99클럽 코테 스터디 3일차 TIL + [프로그래머스] 숫자 문자열과 영단어
  • 99클럽 코테 스터디 1일차 TIL + 배열/스택
제가안난데여♪(´ε`*)
제가안난데여♪(´ε`*)
기억의 유한함을 기록의 무한함으로 ✍️ 예비 개발자가 꿈꾸는 공간 여기는 안나의 개발 블로그 💻
  • 제가안난데여♪(´ε`*)
    안나의 전두엽 어딘가 🧠
    제가안난데여♪(´ε`*)
    기억의 유한함을 기록의 무한함으로 ✍️ 예비 개발자가 꿈꾸는 공간 여기는 안나의 개발 블로그 💻
  • 전체
    오늘
    어제
    • 분류 전체보기 (128)
      • 간단하게 한스푼🥄 (1)
      • Programming (56)
        • Spring (16)
        • Vue.js (6)
        • Deep Learning (3)
        • DataBase (5)
        • React (26)
      • DevOps (21)
        • Docker (12)
        • Linux (4)
      • Algorithm (46)
        • 알고리즘 정리 (5)
        • 자료구조 (0)
        • PS - 백준 (28)
        • 99클럽 코테 스터디 (13)
      • Project (0)
        • CampFire (0)
      • 안나의 취뽀일기 (˵ •̀ ᴗ - ˵ ) ✧ (4)
        • SSAFY_9기 (2)
        • SW 부트캠프 (2)
  • 잔디 달력

    «   2025/07   »
    일 월 화 수 목 금 토
    1 2 3 4 5
    6 7 8 9 10 11 12
    13 14 15 16 17 18 19
    20 21 22 23 24 25 26
    27 28 29 30 31
  • 인기 글

  • 태그

    springboot
    백준 구현문제
    항해99
    알고리즘
    자바
    topology sort
    greedy
    Vue.js
    java stack
    김영한
    Vue
    99클럽
    docker
    linux
    til
    Vue.js 입문하기
    도커
    백준
    front-end
    개발자 취업
    코딩테스트 준비
    java 백준
    백준 java
    도커컨테이너
    java
    자바 스택
    React
    Spring
    리액트 상태
    stack
  • 07-09 02:38
    반응형
  • hELLO· Designed By정상우.v4.10.3
제가안난데여♪(´ε`*)
99클럽 코테 스터디 2일차 TIL + 유클리드호제법/GCD
상단으로

티스토리툴바