LeetCode - 3208. Alternating Groups II

2025. 3. 9. 13:25·Algorithm

문제링크

 

문제 설명

빨간색과 파란색 타일로 이루어진 원형 배열이 있습니다.

정수 배열 colors와 정수 k가 주어집니다. 각 타일의 색상은 colors[i]로 표현됩니다:

  • colors[i] == 0이면 i번째 타일은 빨간색입니다.
  • colors[i] == 1이면 i번째 타일은 파란색입니다.

교차 그룹(Alternating Group)은 원에서 연속된 k개의 타일로 이루어진 부분이며, 서로 교차하는 색상을 가져야 합니다.
즉, 그룹의 첫 번째와 마지막 타일을 제외한 모든 타일은 양옆의 타일과 다른 색상을 가져야 합니다.

원형 배열이므로, 첫 번째 타일과 마지막 타일도 서로 인접한 것으로 간주합니다.

k개의 연속된 타일이 조건을 만족하는 교차 그룹의 개수를 반환하세요.

제한 사항

  • 3 <= colors.length <= 10^5
  • 0 <= colors[i] <= 1
  • 3 <= k <= colors.length

예시

Example 1:

Input: colors = [0,1,0,1,0], k = 3

Output: 3

Explanation:

Alternating groups:

Example 2:

Input: colors = [0,1,0,0,1,0,1], k = 6

Output: 2

Explanation:

Alternating groups:

Example 3:

Input: colors = [1,1,0,1], k = 4

Output: 0

Explanation:

풀이 흐름

  • colors.length의 범위가 10^5 이므로 하나씩 일일이 확인하면 시간 초과가 발생합니다.
  • 고민하다가 떠오른 방법은 교차 그룹을 일일이 구하지 말고 교차가 이뤄지는 횟수를 센 뒤에 교차의 횟수가 k 이상이면 교차 그룹의 갯수를 1씩 카운트하면 되지 않을까 생각했습니다. (시간복잡도: O(N))
  • 원형 배열이므로 colors.length의 2배를 돌면서 교차가 이뤄지는 횟수를 세주고 만약 교차되지 않으면 교차의 횟수를 다시 1로 초기화해줍니다.

코드

import java.util.*;

class Solution {
    public int numberOfAlternatingGroups(int[] colors, int k) {
        int n = colors.length;
        int c = 0;
        int re = 0;
        for (int i = 0; i < 2 * n; i++) {
            if (colors[i % n] != colors[(i + 1) % n]) {
                c++;
            } else {
                c = 1;
            }
            if (i >= n && c >= k) {
                re++;
            }
        }
        return re;
    }
}

 

'Algorithm' 카테고리의 다른 글

백준 - 16207: 직사각형  (0) 2025.03.14
LeetCode - 1358. Number of Substrings Containing All Three Characters  (1) 2025.03.11
LeetCode - 1980. Find Unique Binary String  (1) 2025.02.20
LeetCode - 1718. Construct the Lexicographically Largest Valid Sequence  (1) 2025.02.16
LeetCode - 1352. Product of the Last K Numbers  (2) 2025.02.14
'Algorithm' 카테고리의 다른 글
  • 백준 - 16207: 직사각형
  • LeetCode - 1358. Number of Substrings Containing All Three Characters
  • LeetCode - 1980. Find Unique Binary String
  • LeetCode - 1718. Construct the Lexicographically Largest Valid Sequence
ggio
ggio
개발 공부를 하며 배운 내용을 기록합니다.
  • ggio
    기록을 하자
    ggio
  • 전체
    오늘
    어제
    • 분류 전체보기 (42)
      • SW마에스트로 (5)
      • System Architecture (8)
      • Algorithm (15)
      • Side Tech Notes (8)
      • CS (5)
      • 취준 (1)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    시스템 설계
    fail over
    멀티 코어
    소프트웨어 마에스트로
    프로액터 패턴
    Algorithm
    비관락
    지리적 분산
    프로그래밍
    메시지 큐
    코딩테스트
    토스 NEXT
    3PC
    객체지향
    리트코드
    leetcode
    알고리즘
    Programming
    fail back
    소마
    리액터 패턴
    SW마에스트로
    at-least-once
    매일메일
    분산락
    시스템 아키텍쳐
    다중화
    부트캠프
    코테
    ha 아키텍처
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
ggio
LeetCode - 3208. Alternating Groups II
상단으로

티스토리툴바