Taehyeon-Kim/SwiftAlgorithm

2/6 ~ 2/12

Closed this issue · 5 comments

이상한 문자 만들기

import Foundation
func solution(_ s:String) -> String {
    return s.components(separatedBy: " ").map {
        $0.enumerated().map { (idx, value) in
            return idx % 2 == 0 ? value.uppercased() : value.lowercased()
        }.joined()
    }.joined(separator: " ")
}
  • 같은 코드인데 components를 split으로 바꾸면 tc를 통과하지 못한다. SubString 타입때문인지 의심이 가긴 하는데,,,
func solution(_ s:String) -> String {
    return s.split(separator: " ", omittingEmptySubsequences: false).map {
        $0.enumerated().map { (idx, value) in
            return idx % 2 == 0 ? value.uppercased() : value.lowercased()
        }.joined()
    }.joined(separator: " ")
}
  • 기본적으로 split 메서드는 empty sequences를 생략하고 SubString을 만들어내는데, 이 때문에 틀리는 문제였다. 단어 자체에 공백이 포함되어 있는 경우 답이 올바르지 않았어서 이를 방지하기 위해서 omittingEmptySubsequences 옵션을 false로 설정해주었다. components와 split의 차이를 정확하게 알고 있지 못해서 어려움을 겪었다.

프렌즈4블록

  • 전형적인 시뮬레이션 문제

  • 집념으로 해결했다.

  • 이건 과연 문제를 푼걸까.. 어떻게 하면 구현을 더 깔끔하게 실수없이 할 수 있을지 고민해봐야겠다.

  • 디버깅, 좌표 이동 등 자주 쓰이는 건 메서드 미리 구현해놓고 외워도 될 것 같다.

  • 그리고 세로 묶음으로(스택단위로) 바라보는 경우가 생각보다 많은 것 같은데 2차원 배열을 Column 단위로 보는 방법을 미리 살펴보면 나중에 문제 다룰때 편할 것 같다.

진수 변환

  • 구현, 문자열 문제, 난이도 1 같음
  • string radix 활용한 진법 변환만 신경쓰면 되었음

불량 사용자

  • 순열이 아이템으로 쓰인 문제
  • 문자열 비교할 때 zip을 사용하면 괜찮은 로직을 구현할 수 있다.
  • 놓고 보면 구현 문제 그 자체인데, 문자열 처리(zip) / 경우의 수 - 순열 / Set - 중복 제거로 풀리는 문제다.

다단계 칫솔 판매

  • 트리 구조이기도 했고, 재귀적으로 연산이 일어나는 것 같아 dfs 또는 재귀로 풀 수 있었다. (dfs도 내부적으로 재귀로 구현하면 되니까 결국 재귀)
  • 재귀라고 하면 귀납적 논리를 이용해 이전항과 현재항의 관계만 잘 나타내면 된다.
  • 추천인이 없는 경우는 근데 그냥 10% 이익이 뜯기는 것인지 아직 이해를 잘 못했다.
  • dfs에 익숙해질필요가 있어보인다.