TIL

[코테연습] 3151. Special Array I

크라00 2025. 2. 1. 18:09

https://chatgpt.com/c/679de38b-7b38-8002-a099-50982c4c8d05?model=gpt-4o

 

문제 타입

  • 배열 (Array)
  • 브루트포스 (Brute Force) 또는 그리디 (Greedy)
  • 조건 검증 (Conditional Checking)

문제 분석

  • 주어진 배열이 스페셜 배열인지 확인해야 한다.
  • 스페셜 배열의 조건:
    • 배열의 인접한 두 원소의 홀수/짝수가 번갈아 나타나야 함.
    • 예를 들어, [1, 2, 3, 4]는 스페셜 배열이지만, [1, 3, 5]는 스페셜 배열이 아님.
  • 배열의 길이가 1이면 항상 스페셜 배열로 간주할 수 있음.
  • 배열의 길이가 2 이상일 때, 모든 연속된 쌍이 홀짝이 다르면 참(True), 그렇지 않으면 거짓(False)을 반환해야 함.

문제 풀이

  1. 배열이 비어있거나 길이가 1이면 True 반환
    • 배열이 하나의 원소만 가지면 조건을 위배할 수 없으므로 자동으로 스페셜 배열이 됨.
  2. 연속된 두 개의 원소를 확인하는 반복문 실행
    • for i in range(len(nums) - 1): 를 사용하여 nums[i]와 nums[i+1]을 비교.
    • nums[i] % 2와 nums[i+1] % 2 값이 같으면 False 반환 (둘 다 홀수이거나 짝수이면 실패).
  3. 모든 쌍이 조건을 만족하면 True 반환
    • 모든 반복이 끝날 때까지 False를 반환하지 않았다면, 배열은 스페셜 배열이므로 True 반환.

 

> java

 

class Solution {
    public boolean isArraySpecial(int[] nums) {
        for (int i = 0; i < nums.length-1; i++) {
            int current = nums[i] % 2 == 0 ? 0 : 1;
            int next = nums[i+1] % 2 == 0 ? 0 : 1;
            if (current == next) {
                return false;
            }
        }

        return true;
    }
}
 
 
> python
 
class Solution:
    def isArraySpecial(self, nums: List[int]) -> bool:
        for i in range(len(nums)-1) :
            current = 1 if nums[i] % 2 == 0 else 0
            _next = 1 if nums[i+1] % 2 == 0 else 0
            if current == _next :
                return False
        return True