본문 바로가기
기타/알고리즘

LeetCode - 문자열의 최대 공약수/가장 많은 사탕을 가지고 있는 아이들

by 개발짜 2024. 10. 28.

1071. 문자열의 최대 공약수

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

문제

주어진 두 문자열 str1과 str2의 가장 큰 공약수(GCD)를 찾아야 합니다.
두 문자열의 공약수는, 두 문자열을 여러 번 반복해서 만들 수 있는 문자열입니다.
예를 들어, "ABCABC"와 "ABC"는 공통적으로 "ABC"로 나뉠 수 있습니다.

 

풀이

1. str1 + str2 값과 str2 + str1 값이 같지 않으면 문자열의 공약수가 없는 것으로 판단한다.

2. str1, str2 의 길이로 최대 공약수 값(gcd 메서드)을 구한다.

3. str1 의 첫 문자열부터 최대 공약수 길이만큼 str1 문자열을 자른 것을 반환한다.

void main() {
  String? str1 = stdin.readLineSync();
  String? str2 = stdin.readLineSync();
  print(gcdOfStrings(str1!, str2!));
}

String gcdOfStrings(String str1, String str2) {
  // 두 문자열을 이어 붙였을 때 결과가 같지 않으면 공통 문자열이 없는 것
  if (str1 + str2 != str2 + str1) {
    return '';
  }

  // 두 문자열 길이의 최대 공약수를 구함
  // b 가 0 이면 a, 0 이 아니면 재귀적으로 함수 호출을 다시 함
  int gcd(int a, int b) {
    return b == 0 ? a : gcd(b, a % b);
  }

  // str1과 str2의 길이의 최대 공약수 만큼 문자열의 앞부분을 반환
  int gcdLength = gcd(str1.length, str2.length);
  return str1.substring(0, gcdLength);
}

1431. 가장 많은 사탕을 가지고 있는 아이들

https://leetcode.com/problems/kids-with-the-greatest-number-of-candies/description/?envType=study-plan-v2&envId=leetcode-75

 

문제

각 아이에게 주어진 사탕의 개수를 나타내는 정수 배열 candies가 주어집니다.
당신은 각 아이에게 추가로 줄 수 있는 사탕의 개수를 나타내는 정수 extraCandies도 갖고 있습니다.
각 아이가 가진 사탕의 수에 extraCandies를 더했을 때,
그 아이가 가장 많은 사탕을 가진 아이 중 하나가 될 수 있는지를 확인하세요.

결과로 각 아이에 대해 true 또는 false를 담은 배열을 반환하세요.
만약 그 아이가 extraCandies를 더했을 때,
그가 가장 많은 사탕을 가진 아이가 될 수 있다면 true, 그렇지 않다면 false를 반환합니다.

 

풀이

1. candies 에서 제일 큰 값을 구하여 maxCandy 에 할당한다.

2. candies 내에서 map 함수를 이용하여 원소값 + extraCandies 가 maxCandy 보다 크면 true 작으면 false 값으로 초기화하여 리스트로 생성한다.

void main() {
  List<int> candies = [2, 3, 5, 1, 3];
  int extraCandies = 3;

  int maxCandy = 0;
  for (int candy in candies) {
    if (maxCandy < candy) {
      maxCandy = candy;
    }
  }

  List<bool> result =
      candies.map((candy) => candy + extraCandies >= maxCandy).toList();

  print(result);
}

 

댓글