week11 Algorithm

YEOMI·2024년 1월 16일

Swfit - Coding Bottle

목록 보기
13/13

week11 Algorithm _ nahyun

1번 문제 : 중복된 문자 제거

  • 풀이실패 유형 : X (풀이성공시 X, 실패시에는 해당 유형 번호 작성하고 기입된 내용에 맞게 자신이 어디까지 진행하였는지 작성.)
  • 풀기까지 걸린 시간 : 30분
  • 어떤 알고리즘을 사용했는지 : contain 중복 문자 제거
  • 접근부터 풀이까지의 과정
  1. 빈 문자열 result 생성
  2. 입력받은 my_string의 문자가 result에 포함되어 있지 않으면 result에 추가해서 결과적으로 중복 없는 문자만 출력됨
  • 성공 코드
       import Foundation
       
       func solution(_ my_string:String) -> String {
         var result = ""
         for char in my_string{
             if !result.contains(char) {
               result.append(char)
           }
       }
       return result
    }

2번 문제 : 주사위 게임 3

  • 풀이실패 유형 : X
  • 풀기까지 걸린 시간 :
  • 어떤 알고리즘을 사용했는지 :
  • 접근부터 풀이까지의 과정
  1. 주사위의 숫자를 배열 dice에 저장. Set로 중복을 제거한 후, uniqueDice 상수에 저장
  2. counts라는 딕셔너리를 선언. 주사위 숫자를 키, 그 숫자가 주사위에서 몇 번 나왔는지를 값으로 저장
  3. dice 배열을 순회, 각 숫자가 몇 번 등장하는지 counts 딕셔너리에 저장
  4. 중복을 제거한 주사위 숫자의 개수(uniqueDice.count)에 따라 점수를 계산
  5. switch문에서 주사위의 숫자 종류의 개수(uniqueDice.count)를 기준으로 각각의 경우를 선택
    case 1:: 주사위의 숫자가 모두 같을 때에 해당합니다. 이 경우에는 1111 a를 반환합니다. 여기서 a는 주사위의 숫자입니다.
    case 2:: 주사위의 숫자가 두 가지일 때에 해당합니다. 이 경우에는 두 가지 숫자 중 하나가 세 번 등장하는 경우와 두 번씩 등장하는 경우를 구분합니다.
    세 번 등장하는 경우: counts.values.contains(3)를 통해 세 번 등장하는 숫자가 있는지 확인합니다. 이 경우에는 (10
    p + q) (10 p + q)를 반환합니다.
    여기서 p는 세 번 등장하는 숫자, q는 한 번 등장하는 숫자입니다.
    두 번씩 등장하는 경우: else문을 통해 두 번씩 등장하는 경우를 처리합니다. 이 경우에는 (p + q) abs(p - q)를 반환합니다. 여기서 p와 q는 각각 두 번 등장하는 숫자입니다.
    case 3:: 주사위의 숫자가 세 가지일 때에 해당합니다. 이 경우에는 두 개의 숫자가 동일하고 나머지 두 개의 숫자가 다른 경우를 처리합니다.
    두 개의 숫자가 동일한 숫자를 p로 설정하고, 나머지 두 개의 숫자를 qr로 설정하여 qr[0]
    qr[1] 점을 반환합니다.
    default:: 주사위의 숫자가 모두 다를 때에 해당합니다. 이 경우에는 주사위의 숫자 중 가장 작은 숫자를 반환합니다.
  • 성공 코드
    ```swift
    import Foundation
    func solution(_ a: Int, _ b: Int, _ c: Int, _ d: Int) -> Int {
      let dice = [a, b, c, d]
      let uniqueDice = Set(dice) //중복 제거 후 저장
      var counts = [Int: Int]() // 키: 주사위 숫자, 값: 주사위가 몇 번 나왔는지
    
    for num in dice {
        counts[num, default: 0] += 1
    }
    
    switch uniqueDice.count {
    case 1:
        // 모든 주사위의 숫자가 같을 때
        return 1111 * a
    case 2:
        // 두 개의 서로 다른 숫자가 나올 때
        if counts.values.contains(3) {
            // 세 개의 주사위의 숫자가 같은 경우
            let p = counts.first { $1 == 3 }!.key
            let q = counts.first { $1 == 1 }!.key
            return (10 * p + q) * (10 * p + q)
        } else {
            // 두 개씩 동일한 숫자가 나올 때
            let (p, q) = (counts.keys.min()!, counts.keys.max()!)
            return (p + q) * abs(p - q)
        }
    case 3:
        // 두 개의 주사위에서 나온 숫자가 같고 나머지 두 개의 주사위에서 나온 숫자가 다른 경우
        let p = counts.first { $1 == 2 }!.key
        let qr = dice.filter { $0 != p }
        return qr[0] * qr[1]
    default:
        // 모든 주사위의 숫자가 다를 때
        return dice.min()!
    }
    }
    ```

3번 문제 : 서울에서 김서방 찾기

  • 풀이실패 유형 : X
  • 풀기까지 걸린 시간 : 10분
  • 어떤 알고리즘을 사용했는지 : 배열 인덱스 조회
  • 접근부터 풀이까지의 과정
  1. firstIndex를 사용하여 배열에서 Kim이 첫 번째로 등장하는 위치를 찾는다.
  2. 값을 return
  • 성공 코드

    import Foundation
    
    func solution(_ seoul:[String]) -> String {
      return "김서방은 \(seoul.firstIndex(of: "Kim")!)에 있다"
    }
profile
뭐라도 좀 해라

0개의 댓글