TIL/알고리즘 공부
백준 2675번 Swift 알고리즘 연습
여의도사노비
2022. 8. 12. 17:47
728x90
문제 이해까지는 순탄하게 했는데 마지막 print("") 이 부분을 생각하는데 시간이 오래 걸렸다.
이 문제를 풀면서 생각한 논리적 흐름은
- 우선 "3 ABC"를 입력했을 때 출력이 "AAABBBCCC"로 나올 수 있도록 코드를 짜보자
- 그렇게 하기 위해선 앞의 반복횟수를 뜻하는 Int(3)과 String("ABC")를 각각 구분해줄 수 있어야한다
- 마침 백준에서는 이를 Space로 구분하고 있으니 split에서 Space를 사용하여 구분할 수 있겠다
- 그렇게 구분을 하면 num 안에는 array 형태로 ["3", "ABC"] 값이 저장된다
- 이 중 num[1]은 for 문에서 num[2] "ABC"의 각 문자 부분을 반복시키도록 for 문을 구성한다
- 이를 원하는 testCase 숫자 만큼 반복한다
논리적으로 흐름은 금방 쫓아 갔는데 마지막 부분에 print("")를 안해주니 한 번 값을 입력 받았을 때
AAABBBCCC 값이 나오고 줄바꿈 없이 바로 옆으로 readLine이 생겼다. (AAABBBCCC_ 이런 식으로)
그래서 이를 해결하기 위한 방법을 print의 terminator나 separator로 찾으려하니 답이 안나왔다.
결국 찾은 답은 character를 출력한 후 공백을 한 번 더 출력하여 줄바꿈을 해주는 방법이었다.
* 2675번
var testCase = Int(readLine()!)
for _ in 1...(Int(testCase ?? 0)) {
var num = readLine()!.split { $0 == " " }
for character in num[1] {
for _ in 1...(Int(num[0]) ?? 0) {
print(character, terminator: "")
}
}
print("")
}
정리(Today I Learned)
- 줄바꿈은 생각보다 간단하게 이루어진다
- 옵셔널 값이 nil이어서 오류가 발생할 경우를 대비해 Optional() ?? something 형태를 쓴다