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

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • uikit
  • Q
  • Swift
  • ㅅ

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
clamp

Clamp

코딩테스트/프로그래머스

프로그래머스 - 위장[Swift](조합)

2023. 2. 8. 16:08

위장

문제 설명

스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다.

예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다.

종류이름
얼굴 동그란 안경, 검정 선글라스
상의 파란색 티셔츠
하의 청바지
겉옷 긴 코트

스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요.

제한사항
  • clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다.
  • 스파이가 가진 의상의 수는 1개 이상 30개 이하입니다.
  • 같은 이름을 가진 의상은 존재하지 않습니다.
  • clothes의 모든 원소는 문자열로 이루어져 있습니다.
  • 모든 문자열의 길이는 1 이상 20 이하인 자연수이고 알파벳 소문자 또는 '_' 로만 이루어져 있습니다.
  • 스파이는 하루에 최소 한 개의 의상은 입습니다.
입출력 예clothesreturn
[["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]] 5
[["crow_mask", "face"], ["blue_sunglasses", "face"], ["smoky_makeup", "face"]] 3
입출력 예 설명

예제 #1
headgear에 해당하는 의상이 yellow_hat, green_turban이고 eyewear에 해당하는 의상이 blue_sunglasses이므로 아래와 같이 5개의 조합이 가능합니다.

1. yellow_hat
2. blue_sunglasses
3. green_turban
4. yellow_hat + blue_sunglasses
5. green_turban + blue_sunglasses

예제 #2
face에 해당하는 의상이 crow_mask, blue_sunglasses, smoky_makeup이므로 아래와 같이 3개의 조합이 가능합니다.

1. crow_mask
2. blue_sunglasses
3. smoky_makeup

코드 및 소스코드

조합 문제

각 부위의 옷을 입을수도, 안입을수도 있다. 하지만 아무것도 입지 않을 순 없다.

모자가 3개고, 상의가 2개라면

1번모자를 입는다.,   2번 모자를 입는다.        3번 모자를 입는다.          모자를 안입는다.

1번 상의를 입는다.      2번 상의를 입는다.      상의를 안입는다.

모자의 경우 총 4가지 경우의 수가 나온다

상의의 경우 총 3가지의 경우의 수가 나온다.

이를 조합하면 4x3 = 12의 경우의 수가 나오지만, 모자와 상의를 모두 안입을순 없으니 - 1을 하게되면

총 11가지의 경우의 수가 나온다.

옷 부위를 [String: [String]]로 구하고 부위별 개수를 구해서

만약 

모자 3개, 상의 5개, 하의 1개라면 각 각 개수에 +1을 한 4, 6, 2를 모두 곱해서 48이란 경우의 수가 나오고

옷을 아무것도 안입는 경우의수 1개를 제외하면 47의 경우의 수가 나온다.

import Foundation

func solution(_ clothes:[[String]]) -> Int {
    var closet = [String: [String]]()
    var count = [String:Int]()
    var multiple = 1
    
    for sentence in clothes{
        let keyword = sentence[1]
        closet.updateValue([], forKey: keyword)
        count.updateValue(0, forKey: keyword)
    }
    
    
    for sentence in clothes{
        let keyword = sentence[1]
        let cloth = sentence[0]
        closet[keyword]!.append(cloth)
        count[keyword]! += 1
    }
    
    for i in count{
        count[i.key]! += 1
    }
    
    for i in count{
        multiple *= i.value
    }
    
    return multiple - 1
}
저작자표시 비영리 동일조건 (새창열림)
    '코딩테스트/프로그래머스' 카테고리의 다른 글
    • 프로그래머스 - [1차]뉴스 클러스터링[Swift](다중집합)
    • 프로그래머스 - 튜플[Swift]
    • 프로그래머스 - 괄호 회전하기 [Swift]
    • 프로그래머스 H-Index[Swift]
    clamp
    clamp
    주니어 iOS개발자의 발악!!!!!!!

    티스토리툴바