1071. 문자열의 최대 공약수
문제
주어진 두 문자열 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. 가장 많은 사탕을 가지고 있는 아이들
문제
각 아이에게 주어진 사탕의 개수를 나타내는 정수 배열 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);
}
'기타 > 알고리즘' 카테고리의 다른 글
LeetCode - 643 최대 평균 하위 배열1 (0) | 2024.10.31 |
---|---|
Leetcode - 꽃 심기 / 문자열의 역모음 (0) | 2024.10.29 |
프로그래머스 코딩테스트 연습 - 문자열 밀기 with Kotlin (0) | 2022.12.11 |
프로그래머스 코딩테스트 연습 - 연속된 수의 합 with Kotlin (0) | 2022.12.10 |
프로그래머스 코딩테스트 연습 - 다음에 올 숫자 with Kotlin (0) | 2022.12.08 |
댓글