clamp
Clamp
clamp
글쓰기 관리
전체 방문자
오늘
어제
  • 분류 전체보기 (509)
    • IOS (85)
    • SwiftUI+TCA+Combine (9)
    • RxSwift + MVVM (56)
    • Clean Architecture (12)
    • SWIFT (56)
    • iOS - TDD (2)
    • 디자인패턴 (4)
    • CS (56)
      • 알고리즘 (29)
      • 운영체제 (15)
      • 자료구조 (2)
      • 네트워킹 (4)
      • 기타 (6)
    • 회고 (0)
    • Firebase (18)
    • SwiftUI (10)
    • iOS - UIKit (11)
    • iOS - 오픈소스 (6)
    • 코딩테스트 (166)
      • 프로그래머스 (164)
    • 정보처리기사 (14)
    • GitHub (2)
글쓰기 / 관리자

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • ㅅ
  • Q
  • uikit
  • Swift

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
clamp

Clamp

프로그래머스 - 두 큐 합 같게 만들기 Swift
코딩테스트/프로그래머스

프로그래머스 - 두 큐 합 같게 만들기 Swift

2023. 2. 16. 13:09

https://school.programmers.co.kr/learn/courses/30/lessons/118667

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


풀이 및 소스코드

만들어야 하는 sum의 값은 (queue1 + queue2) / 2 

만약 (queue1 + queue2) % 2 != 0, 즉 홀수라면 각 배열에 0.5씩 있어야 하므로 정수 배열에선 만들 수 없다.

 

배열을 하나로 두고, 좌 우 포인터를 이용한다. 초기의 queue1의 sum 값을 갖고 시작하게 되는데, 

만약 sum < target 이라면 right을 1증가시키키고 sum에 더한다.

만약 sum > target 이라면 sum - left를 하고 left를 1 증가시킨다

 

언제까지 반복할까?

right의 증가는 7에서 멈춰야 한다. 즉 6일땐 작동하고 7이 될 수 있지만 7일땐 8이 될 수 없기 때문

left는 right보다 작거나 같아야 한다. 원소가 하나일 수 있으니까.

sum == target 이 되는 순간 멈춰야한다.

 

만약 right가 끝까지 가서 반복문이 멈췄는데 sum의 값이 target의 값과 다르다면 그건 만들 수 없는 것

import Foundation

func solution(_ queue1:[Int], _ queue2:[Int]) -> Int {
    var left = 0
    var right = queue1.count-1
    var count = 0
    let circle = queue1 + queue2
    
    var q1sum = queue1.reduce(0){ $0 + $1 }
    var q2sum = queue2.reduce(0){ $0 + $1 }
    
    let target  = (q1sum + q2sum) / 2
    
    if (q1sum + q2sum) % 2 != 0{
        return -1
    }
    
    while right < circle.count - 1 && left <= right{
        if q1sum < target{
            right += 1
            q1sum += circle[right]
        }else if q1sum > target{
            q1sum -= circle[left]
            left += 1
        }else{
            break
        }
        
        count += 1
    }
    
    if q1sum != target{
        return -1
    }
    
    return  count
}
저작자표시 비영리 동일조건 (새창열림)
    '코딩테스트/프로그래머스' 카테고리의 다른 글
    • 프로그래머스 - 택배상자 Swift (스택, 구현)
    • 프로그래머스 - 가장 큰 정사각형 Swift(DP)
    • 프로그래머스 - 롤케이크 자르기Swift
    • 프로그래머스 - [카카오 인턴] 수식 최대화Swift (DFS, 구현)
    clamp
    clamp
    주니어 iOS개발자의 발악!!!!!!!

    티스토리툴바