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)
글쓰기 / 관리자

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Swift
  • Q
  • uikit
  • ㅅ

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
clamp

Clamp

알고리즘 - 조합(Conbinations) 구현[Swift]
CS/알고리즘

알고리즘 - 조합(Conbinations) 구현[Swift]

2023. 1. 29. 13:23

조합에는 "순서"가 없다.

그저 몇 개를 뽑을 것인지를 사용할 때 조합을 사용한다. 순서는 상관없고 몇개를 다양하게 뽑을지..

순서가 없다는건 1, 2, 3과 3, 2, 1을 같은 숫자로 본다는 것이다.

 

조합의 개수를 구하는 공식은 다음과 같다

 

n = 자료의 총 개수

r = 뽑아서 사용할 자료의 개수

 

만약 5C3일 경우

 

이 되며  5! = 120        (n-r)2! = 2          3! = 6이 되어 120/12 -> 10이 된다. 

 

[1, 2, 3, 4, 5] 5개의 숫자에서 3개를 뽑는 경우의 수는 실제로

1, 2, 3       2, 3, 4

1, 2, 4       2, 3, 5

1, 2, 5       2, 4, 5                   => 총 10개이다

1, 3, 4       3, 4, 5

1, 3, 5 

1, 4, 5   

 

실제로 횟수를 구하는 공식이 아닌 리스트를 구하는 공식을 작성해본다.

 

let list = [1, 2, 3, 4, 5]

var arr = [Int]()
           //start는 index를, target은 목표 개수를 의미
func Combination(_ start: Int,_ target: Int){
	//arr의 count가 target과 같으면? 여기선 요소를 3개 선택했으면?
    if arr.count == target{
        print(arr)
        return
    }else{
    //i는 start +1에서 list의 개수까지 순회한다
        for i in start+1..<list.count{
            arr.append(list[i])
            Combination(i, 3)
            arr.removeLast()
        }
        return
    }
}

Combination(-1, 3)

//[1, 2, 3]
//[1, 2, 4]
//[1, 2, 5]
//[1, 3, 4]
//[1, 3, 5]
//[1, 4, 5]
//[2, 3, 4]
//[2, 3, 5]
//[2, 4, 5]
//[3, 4, 5]

 

해당 알고리즘을 통하여 해결한 문제

https://clamp-coding.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%82%BC%EC%B4%9D%EC%82%ACSwift%EC%A1%B0%ED%95%A9

 

프로그래머스 - 삼총사[Swift][조합]

삼총사 문제 설명 한국중학교에 다니는 학생들은 각자 정수 번호를 갖고 있습니다. 이 학교 학생 3명의 정수 번호를 더했을 때 0이 되면 3명의 학생은 삼총사라고 합니다. 예를 들어, 5명의 학생

clamp-coding.tistory.com

https://clamp-coding.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%86%8C%EC%88%98%EB%A7%8C%EB%93%A4%EA%B8%B0Swift%EC%A1%B0%ED%95%A9-%EC%97%90%EB%9D%BC%EC%8A%A4%ED%86%A0%EC%8A%A4%ED%85%8C%EB%84%A4%EC%8A%A4%EC%B2%B4

 

저작자표시 비영리 동일조건 (새창열림)
    'CS/알고리즘' 카테고리의 다른 글
    • 알고리즘 - 에라스토스테네스 체(소수찾기)[Swift]
    • 알고리즘 - 유클리드호제법[Swift](최대공약수)
    • 그래프, BSF 구현[Swift]
    • 알고리즘 - 그래프 탐색 알고리즘 구현(DFS)[Swift]
    clamp
    clamp
    주니어 iOS개발자의 발악!!!!!!!

    티스토리툴바