[TIL] 프로그래머스: 369게임

Eden·2024년 12월 22일
0

TIL

목록 보기
74/92
post-thumbnail

문제 설명

머쓱이는 친구들과 369 게임을 하고 있습니다. 369 게임은 1부터 숫자를 하나씩 대며 3, 6, 9가 들어가는 숫자는 숫자 대신 3, 6, 9의 개수만큼 박수를 치는 게임입니다. 머쓱이가 말해야 하는 숫자 order가 매개변수로 주어질 때, 머쓱이가 쳐야 할 박수 횟수를 반환하는 함수를 작성해야 합니다.

제한사항

  • 1 ≤ order ≤ 1,000,000

입출력 예

orderresult
31
294232

제출한 코드

func solution(_ order:Int) -> Int {
    let a = String(order).filter { $0 == Character(String(3)) }.count
    let b = String(order).filter { $0 == Character(String(6)) }.count
    let c = String(order).filter { $0 == Character(String(9)) }.count
    
    return a + b + c
}

코드의 문제점

  • 중복된 연산: filter를 세 번 사용해 문자열을 반복 순회하며 3, 6, 9 각각을 개별적으로 세는 방식은 비효율적이다.
  • 코드의 간결성 부족: filterCharacter(String())를 반복적으로 작성해 가독성이 떨어진다.

리팩토링한 코드

func solution(_ order: Int) -> Int {
    return String(order).filter { ["3", "6", "9"].contains($0) }.count
}

리팩토링 설명

  1. 문자열 변환:
    • String(order)로 정수를 문자열로 변환하여 각 자리의 숫자를 순회한다.
  2. filtercontains 활용:
    • filter를 한 번만 사용해, "3", "6", "9"가 포함된 문자를 한 번에 검사한다.
    • ["3", "6", "9"] 배열에 대해 contains를 사용하여 특정 문자 집합에 포함되는지 확인한다.
  3. 횟수 계산:
    • filter로 조건을 만족하는 문자만 남기고, 그 개수를 count로 반환한다.

장점

  • 효율성: 문자열을 한 번만 순회하므로 반복적인 연산을 줄였다.
  • 가독성: 코드가 간결하고 직관적으로 변했다.

배운 점

  • 특정 조건에 맞는 문자를 추출하거나 세는 작업에서는 filtercontains를 함께 사용하면 간결하게 구현할 수 있다.
  • 문자열 조작을 효율적으로 처리하기 위해, 반복적인 연산을 피하고 한 번의 순회로 문제를 해결하는 것이 중요하다.
  • 코드의 효율성과 가독성을 모두 고려해야 최적의 해법을 찾을 수 있다!!
profile
Frontend🌐 and iOS

0개의 댓글