[LeetCode][Java][영어공부] 1071. Greatest Common Divisor of Strings

2026. 4. 24. 21:43·알고리즘 & 자료구조/문제 풀이

https://leetcode.com/problems/greatest-common-divisor-of-strings/description/?envType=study-plan-v2&envId=leetcode-75

 

Greatest Common Divisor of Strings - LeetCode

Can you solve this real interview question? Greatest Common Divisor of Strings - For two strings s and t, we say "t divides s" if and only if s = t + t + t + ... + t + t (i.e., t is concatenated with itself one or more times). Given two strings str1 and st

leetcode.com

concatenate : 연결하다. 연관시키다.

i.e : that is의 라틴어, 앞의 문장을 요약해서 다시말해줄 때 -> "즉, 다시말해"

str1 을 앞에서부터 자르면서 prefix를 하나씩 만들고 다 비교해가면 풀 수 있을 것 같았다.
하지만 구현난이도가 많이 높아보였고 
다른 풀이를 생각해봤다.

일단 gcd가 있냐 없냐를 보면
X = gcd
A = XXXX,   B = XXX 이렇게 같은 문자열이 반복되는 구조라면
AB = BA 라는 것을 이용해서 걸러준다.

gcd를 구하는 방법은

 

gcd 가 X 라 가정하고 x = X.length()

gcd로 이루어진 임의의 문자열 2개
str1 = XXXX ...  = X * n
str2 = XXX  ... = X * m 

이 말은 두개의 문자열의 길이는 x의 배수여야한다.
그 말은 x = gcd(str1, str2) 라는 것을 알 수 있다.
정답의 길이를 알았으면 그만큼 자르면 정답이 될 수 있다.

n = 4 , m = 3 이라 가정하자
위의 계산을 문자열의 길이로 생각하고 최대공약수를 구한다면
gcd(4x, 3x) = x * gcd(4, 3) = x 이라는 것을 알 수 있다.

이것을 통해서 정답의 길이를 구하고 str1에서 0번째 인덱스에서 gcd - 1 인덱스 까지 자르면 정답이 나온다.

gcd 구하는 법
https://mirrorpi.tistory.com/entry/%EC%9C%A0%ED%81%B4%EB%A6%AC%EB%93%9C-%ED%98%B8%EC%A0%9C%EB%B2%95-%EC%B5%9C%EB%8C%80%EA%B3%B5%EC%95%BD%EC%88%98-%EA%B5%AC%ED%95%98%EA%B8%B0-%EC%B5%9C%EC%86%8C%EA%B3%B5%EB%B0%B0%EC%88%98

 

유클리드 호제법 - 최대공약수 구하기(+ 최소공배수)

알아야할 표현 최대공약수 = GCD = Greatest Common DivisorGCD(A, B) = A와 B의 최대공약수 유클리드 호제법 두 양수 A, B(A > B)에 대하여 A = BQ + R (0 ≤ R 즉, GCD(A, B) = GCD(B, R)R = 0이라면 A, B의 최대공약수는 B가

mirrorpi.com

 

class Solution {
    public String gcdOfStrings(String str1, String str2) {
        if(!(str1 + str2).equals(str2 + str1)) return "";

        int gcdLen = gcd(str1.length(), str2.length());
        return str1.substring(0, gcdLen);
    }

    public int gcd(int a, int b) {
        while(b != 0) {
            int temp = a%b;
            a = b;
            b = temp;
        }
        return a;
    }
}
저작자표시 비영리 변경금지 (새창열림)

'알고리즘 & 자료구조 > 문제 풀이' 카테고리의 다른 글

[프로그래머스 알고리즘 고득점 Kit][스택/큐][Java] 기능 개발  (0) 2026.04.24
[프로그래머스 알고리즘 고득점 Kit][깊이/너비 우선 탐색(DFS/BFS)][Java] 단어 변환  (0) 2026.04.21
[프로그래머스 알고리즘 고득점 Kit][동적계획법(Dynamic Programming))][Java] N으로 표현  (0) 2026.04.19
[프로그래머스 알고리즘 고득점 Kit][그래프][Java] 방의 개수  (0) 2026.04.18
[프로그래머스 알고리즘 고득점 Kit][동적계획법(Dynamic Programming))][Java] 정수 삼각형  (0) 2026.04.17
'알고리즘 & 자료구조/문제 풀이' 카테고리의 다른 글
  • [프로그래머스 알고리즘 고득점 Kit][스택/큐][Java] 기능 개발
  • [프로그래머스 알고리즘 고득점 Kit][깊이/너비 우선 탐색(DFS/BFS)][Java] 단어 변환
  • [프로그래머스 알고리즘 고득점 Kit][동적계획법(Dynamic Programming))][Java] N으로 표현
  • [프로그래머스 알고리즘 고득점 Kit][그래프][Java] 방의 개수
수수다
수수다
우하하
  • 수수다
    그냥살자
    수수다
  • 전체
    오늘
    어제
    • 분류 전체보기 (51) N
      • 프로젝트 (1)
      • 알고리즘 & 자료구조 (25) N
        • 내용 정리 (2)
        • 문제 풀이 (23) N
      • 데이터베이스 (21)
        • 내용 정리 (1)
        • 문제 풀이 (20)
      • CS (2)
      • 기타 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 네이버 블로그
  • 공지사항

  • 인기 글

  • 태그

    SQL
    SSAFY
    분리집합
    바이브코딩
    mysql
    평균회귀
    깊이/너비 우선 탐색(DFS/BFS)
    이분탐색
    매개변수탐색
    코테
    HTTP 메서드
    프로그래머스
    바킹독
    그래프
    date_format
    coalesce
    DP
    유니온파인드
    DisjointSet
    IFNULL
    삼성청년SW·AI아카데미
    해시
    bfs
    코팅테스트
    알고리즘
    코딩테스트
    Java
    프로그래머스 알고리즘 고득점 kit
    동적계획법
    싸피
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
수수다
[LeetCode][Java][영어공부] 1071. Greatest Common Divisor of Strings
상단으로

티스토리툴바