[Swift/프로그래머스] 조건 문자열

sonny·2024년 11월 24일
2

TIL

목록 보기
51/133

나의 답)

import Foundation

func solution(_ ineq: String, _ eq: String, _ n: Int, _ m: Int) -> Int {
    switch (ineq, eq) {
    case (">", "="): return n >= m ? 1 : 0
    case (">", "!"): return n > m ? 1 : 0
    case ("<", "="): return n <= m ? 1 : 0
    case ("<", "!"): return n < m ? 1 : 0
    default: return 0
    }
}

풀기까지 과정

주어진 문제는 비교 연산자와 논리 연산자를 조합하여 정수 n과

m의 관계를 확인하는 것인데,

문제가 조금만 길어져도 이해하기가 어려워진 나는..

읽고 이해하는데 5분 넘게 걸린 듯 하다 ㅎㅎ

입출력 예시를 보고 음 그럼 총 네가지의 예시가 필요하다는 걸 알게 되었고,

일단 필요한 건 "이거 아니면 ~ 이거." 는 뭐다?

if else 다~

그렇게 if else로 필요한 네가지 상황을 모두 논리연산자와 삼항연산자로 써봤다.

[ if - else 방법 ]

import Foundation

func solution(_ ineq: String, _ eq: String, _ n: Int, _ m: Int) -> Int {
    if ineq == ">" && eq == "=" {
        return n >= m ? 1 : 0
    } else if ineq == ">" && eq == "!" {
        return n > m ? 1 : 0
    } else if ineq == "<" && eq == "=" {
        return n <= m ? 1 : 0
    } else if ineq == "<" && eq == "!" {
        return n < m ? 1 : 0
    }
    return 0
}

일단 돌아가긴 하는데,

조건문이 많아지면 if-else 블록이 길어지고 복잡해져서

코드 읽기가 어려워진 것 같다.

그래서 이용해본 것이 바로 스위치문이다.

switch 문의 특징

  • 각 상태는 키워드 case를 통해 나타낼수 있다.
  • case 상태 끝에 콜론 ':'을 붙여 패턴을 종료한다.
  • 하나의case문이 종료되면 switch문이 종료된다.
  • switch문은 모든 경우를 커버하기 위해서 마지막에 default 키워드를 사용해야 한다.
  • 단, default 키워드 없이도 모든 경우가 커버 되었다면, default 키워드가 없어도 된다.

스위치 문을 이용한 풀이

import Foundation

func solution(_ ineq: String, _ eq: String, _ n: Int, _ m: Int) -> Int {
    // 튜플매칭
    switch (ineq, eq) {
}

우선 switch문은 ineqeq의 조합에 따라 실행할 코드를 결정하기 때문에

튜플 매칭 (ineq, eq) 형태로 두 문자열 값을 한 번에 처리해주고,

아래의 case와 일치하는 조합을 찾는 걸로 시작하려고 한다.

func solution(_ ineq: String, _ eq: String, _ n: Int, _ m: Int) -> Int {
    switch (ineq, eq) {
    case (">", "="): return n >= m ? 1 : 0
    case (">", "!"): return n > m ? 1 : 0
    case ("<", "="): return n <= m ? 1 : 0
    case ("<", "!"): return n < m ? 1 : 0
    default: return 0
    }
}

맨 처음 case로 설명을 해보자면,

ineq가 ">"이고, eq가 "="일 때 실행이 되고,

n >= m을 평가한다.

그렇게 조건이 참이면 1을 반환하고, 조건이 거짓이면 0을 반환하게 하는 것이다.

그리고 마지막엔 어떤 case와도 일치하지 않을 경우 실행되는 default 값을 넣어줬다.

default가 필수인 경우

switch의 모든 가능한 케이스를 다루지 않을 때.
열거형(Enums)이 아닌 정수, 문자열과 같은 일반적인 값에 대해 switch를 사용할 때는 모든 가능한 경우를 나열하기 어렵다.
이 경우 default가 필수이다.

default가 불필요한 경우

switch가 열거형(Enum) 타입에 대해 사용되고, 모든 열거형의 케이스를 다룰 때.
Swift는 열거형의 모든 케이스를 처리하는지 컴파일러가 확인할 수 있으므로, 모든 케이스를 나열하면 default를 생략할 수 있다.

나는 ineqeq의 값이 문제에서 명시된 조건을 벗어나는 경우에 대비한 안전장치로 default를 넣었다.


음 ...

switch문과 튜플을 이용해 조건을 직관적으로 정의할 수 있었고,

혹여라도 조건이 추가되거나 변경될 경우 해당 case만 수정하면 된다. (그럴 일은 없지만 ..ㅎ)

그리고 조건별로 구분되어 있어 한눈에 이해가 되는 로직인 점도 좋다.

스위치문은 쓸 때마다 자꾸 enum이랑 사용하는게 비슷해서 헷갈린다.

둘다 case를 다뤄서 그런가.

enumswitch는 환상의 케미를 자랑한다고 하는데,

추후 예시로 연습도 다시 해봐야겠다.

킵 고잉 킵 고잉~

profile
iOS 좋아. swift 좋아.

2개의 댓글

comment-user-thumbnail
2024년 11월 24일

주말에도 열정 대단해~

1개의 답글

관련 채용 정보