포스트

19. 조건 문자열 (fin)

나의 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import Foundation


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

이렇게 생각한 이유. 처음에는 문자열 그대로 받아서 string으로 해서 해보려고했으나 생각보다 절차가 어려운것 같아 다중 if문을 사용하게 되었다.


(해결) 대부분 에러가 났던이유. if문의 매개변수를 ineq가 아니라 eq를 기준으로 했었다.

그랬더니 반례 2,3 일때 결과를 잘못 리턴하는것을 보았다.

그래서 어느 인자를 먼저 받아서 처리를 하나 매개변수 순서를 보니.

ineq가 먼저 들어왔다. 그래서 if 문의 매개변수를 ineq로 먼저 하였고 푸니 해결이 되었다.

해당문제를 삼항연산자로 간단하게 하려고 했을때 더 오히려 안되었다보니 기본으로 돌아가서 확실하게 풀어보자라는 생각으로 if문을 쭉 나열하여 풀었다.

if문으로 문제를 풀었으니 해당문제를 삼항연산자로 한번 해봐야겠다.

아래는 삼항연산자로 코드를 적어보았다.

확실히 if문으로 먼저 풀어쓴다음, 삼항연산자로 정리를 해보니 에러가 안나고 깔끔했다.

1
2
3
4
5
6
7
8
9
10
11
12
import Foundation


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

다른코드르 보니 switch case로 아주 간단하게 했다.

왜 이렇게 생각을 못했는지 좀 한심하게 느껴지긴한다.

1
2
3
4
5
6
7
8
9
10
11
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
    }
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.