씬디의 블로그
[백준] 사분면 고르기 14681 / [프로그래머스] 점의 위치 구하기 120841 Swift 본문
[백준] 사분면 고르기 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 |