씬디의 블로그

[백준] 사분면 고르기 14681 / [프로그래머스] 점의 위치 구하기 120841 Swift 본문

Algorithm/Baekjoon

[백준] 사분면 고르기 14681 / [프로그래머스] 점의 위치 구하기 120841 Swift

cyndi 2023. 11. 30. 16:29
[백준] 사분면 고르기 14681

문제: https://www.acmicpc.net/problem/14681

 

14681번: 사분면 고르기

점 (x, y)의 사분면 번호(1, 2, 3, 4 중 하나)를 출력한다.

www.acmicpc.net

흔한 수학 문제 중 하나는 주어진 점이 어느 사분면에 속하는지 알아내는 것이다.

사분면은 아래 그림처럼 1부터 4까지 번호를 갖는다.

"Quadrant n"은 "제n사분면"이라는 뜻이다.

예를 들어, 좌표가 (12, 5)인 점 A는 x좌표와 y좌표가 모두 양수이므로 제1사분면에 속한다.

점 B는 x좌표가 음수이고 y좌표가 양수이므로 제2사분면에 속한다.

점의 좌표를 입력받아 그 점이 어느 사분면에 속하는지 알아내는 프로그램을 작성하시오.

단, x좌표와 y좌표는 모두 양수나 음수라고 가정한다.

 

처음에는 if-else 문을 통해 풀었지만,

func solution14681() {
    let input = readLine()!.components(separatedBy: " ").map { Int($0)! }
    
    let (A, B) = (input[0], input[1])
    
    if A > 0 && B > 0 {
        print("1")
    } else if A < 0 && B > 0 {
        print("2")
    } else if A < 0 && B < 0 {
        print("3")
    } else {
        print("4")
    }
}

 else if 보다는 사분면의 특성을 보고 풀었으면 됐을것이라는 설명에 다시 풀어봤다

func solution14681() {
    let input = readLine()!.components(separatedBy: " ").map { Int($0)! }
    
    let (A, B) = (input[0], input[1])
    
    if A > 0 {
        if B > 0 {
            print("1")
        } else {
            print("4")
        }
    }
    
    if A < 0 {
        if B > 0 {
            print("2")
        } else {
            print("3")
        }
    }
}

이래도 왜 런타임 에러가 나지? 싶었는데

입력 자체가 스페이스바가 아닌, 엔터 형식으로 입력을 했었어야 했다

바보

 

그래서 readLine()을 두개로 받아서 다시 풀었다

func solution14681() {
    let input1 = readLine()!
    let input2 = readLine()!

    let A = Int(input1)!
    let B = Int(input2)!

    if A > 0 {
        if B > 0 {
            print("1")
        } else {
            print("4")
        }
    }

    if A < 0 {
        if B > 0 {
            print("2")
        } else {
            print("3")
        }
    }
}

 

이게 동일한 문제가 프로그래머스에도 있고

중요한건 진짜 놀라운 코드 구현을 발견할 수 있었다!

 

[프로그래머스] 점의 위치 구하기 120841

문제: https://school.programmers.co.kr/learn/courses/30/lessons/120841

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

사분면은 한 평면을 x축과 y축을 기준으로 나눈 네 부분입니다.

사분면은 아래와 같이 1부터 4까지 번호를 매깁니다.

 

  • x 좌표와 y 좌표가 모두 양수이면 제1사분면에 속합니다.
  • x 좌표가 음수, y 좌표가 양수이면 제2사분면에 속합니다.
  • x 좌표와 y 좌표가 모두 음수이면 제3사분면에 속합니다.
  • x 좌표가 양수, y 좌표가 음수이면 제4사분면에 속합니다.

 

x 좌표 (x, y)를 차례대로 담은 정수 배열 dot이 매개변수로 주어집니다.

좌표 dot이 사분면 중 어디에 속하는지

1, 2, 3, 4 중 하나를 return 하도록 solution 함수를 완성해주세요.

 

백준 문제에서 풀이했던 것처럼 if 문을 사용하지 않고

switch문을 사용하고싶었다

그렇게 알게 된 PartialRangeFrom

func solution120841(_ dot:[Int]) -> Int {
    switch(dot[0], dot[1]) {
    case (0..., 0...): return 1
    case (...0, 0...): return 2
    case (...0, ...0): return 3
    case (0..., ...0): return 4
    default: return 0
    }
}

 

0... 부터 시작하면 양수가 될 것이고,

...0 까지의 수는 음수가 될 것이니

이렇게도 표현할 수 있다니 너무 놀라웠다

 

[Partial Range]

2023.11.30 - [Swift] - [Swift] Partial Range From 범위에 관해서

 

[Swift] Partial Range From 범위에 관해서

Swift 보통 범위에 관해서 코드를 작성할 때 아래와 같이 ClosedRange를 가장 기본적으로 사용해왔다 1...10 // 1부터 10까지 // 1 이상 ~ 10 이하 범위 1..

cyndi0330.tistory.com

 

[고차함수 map]

2023.11.30 - [Swift] - [Swift] 고차함수 map

 

[Swift] 고차함수 map

Swift [고차함수 1편 reduce 관련 글] 2023.11.30 - [Swift] - [Swift] 고차함수 reduce [Swift] 고차함수 reduce Swift reduce를 알기 전에 우선 고차함수란 무엇일까 [고차함수 ] 고차함수는 다른 함수를 전달인자로

cyndi0330.tistory.com

'Algorithm > Baekjoon' 카테고리의 다른 글

[백준] 공 바꾸기 10813 Swift  (0) 2023.12.01
[백준] A+B-8 11022 Swift  (0) 2023.11.30
[백준] A-B 1001 Swift  (0) 2023.11.30
[백준] AxB 10998 Swift  (0) 2023.11.30
[백준] 합 8393 Swift  (1) 2023.11.30