[백준으로 배우는 Swift] X보다 작은 수 (백준 10871번)
Updated:
시작하며
[백준 단계별 문제풀기 - for문] 에서 껄끄러웠던 문제 중 두번째인 X보다 작은 수 문제를 풀어보도록 하겠다.
백준 10871번
이번 문제는 첫번째 줄에 N과 X를 입력받고, 두번째 줄의 N개의 숫자들 중에서 X보다 작은 수를 출력해야 한다.
let NX = readLine()!.split(separator: " ").map{Int($0)!}
let data = readLine()!.split(separator: " ").map{Int($0)!}
var output = ""
var check = false // 숫자들을 한칸씩 띄우기 위한 식별자
// N개의 수 만큼 반복
for i in 0..<NX[0] {
// X보다 작은지 비교
if data[i] < NX[1] {
// check가 true일 경우 output에 첫번째 수가 들어간것이므로 공백을 넣어줌
if check == true {
output += " "
}
// 처음으로 X보다 작은 수는 check가 false이므로 공백없이 output에 가장 첫 문자로 들어감
else {
check = true
}
output += "\(data[i])"
}
}
print(output)
#=> if input 10 5 and 1 10 4 9 2 3 8 5 7 6,
#=> prints 1 4 2 3
for문과 2개의 if문을 이용해 N개의 숫자들을 순차적으로 X
와 비교하고 X
보다 작은 수는 output
변수에 공백으로 구분하여 입력해주었다.
(1) 첫번째 for문
NX[0] = N
이므로N
개의 수를 비교하기 위해N
번 반복되도록 함- 반복되는 지역변수(
i
)는 0부터 시작
(2) 첫번째 if문
NX[1] = X
이므로data[i]
와 비교해 작은지 아닌지 판별함X
보다 작을 경우output
변수에 입력
(3) 두번째 if문
- 식별자를 통해 첫번째로
X
보다 작은 수인지 아닌지 판별함 - 첫번째로
X
보다 작은 수일 경우check = false
이므로output
변수에 공백 없이 가장 먼저 입력됨 - 두번째로
X
보다 작은 수 부터는check = true
이므로output
변수에 공백이 먼저 들어간 후 숫자가 입력됨
Ex) 첫번째로 X보다 작은 수일 경우
output = "1"
두번째로 X보다 작은 수일 경우
output = "1 4"
따라서 예시와 같이 입력되었을 경우, 5보다 낮은 수들은 공백으로 구분되어 입력되게 된다.
이번 문제는 X
보다 작은 수를 구분하는 방법보다 X
보다 작은 수를 공백으로 구분해서 output
변수에 할당하는 방법을 찾는 것이 더욱 까다로운 과정이였다고 느껴졌다.
마무리
이문제까지 [백준 단계별 문제풀기 - for문]의 문제들을 모두 풀어보았다. 아직까지 쉬운 문제들이고 이미 풀어보았던 문제들이였기 때문에 다시 풀어보는데 지장은 없었지만, 이미 풀어본 문제를 다시 풀어보니 새로운 방법을 찾게되고 더 간단하거나 효율적인 방법을 찾을 수 있던것 같다. 다음 while문 문제들부터는 난이도가 올라가니 더 나은방법들을 찾아 문제를 풀어보도록 해야겠다.