티스토리 뷰

반응형

 

 

 

백준 알고리즘 사이트에서 문제를 풀때, 입력이 끝날때까지 입력을 받아 처리해야하는 문제를 종종 마주하게 되는데요.
오늘은 swift 언어로 알고리즘 문제를 풀 때, 입력이 끝날때까지 입력을 받아서 처리하는 방법을 알아보겠습니다. 

그 방법을 알아보고, 실제 백준 알고리즘 문제에 적용해보겠습니다. 이번에 다루게 될 문에는 그대로 출력하기 문제입니다. 

 

 


그대로 출력하기 11718


그대로 출력하기 문제(11718)는 말 그대로 입력 받은 그대로 출력하는 문제입니다. 하지만 몇줄의 입력이 주어질지는 모릅니다.
입력 관련 부분은 밑에서 세부적인 문제 내용을 보도록 하겠습니다. 

 

 


해당 문제는 쉬워보이는 주제라고 생각했는데 생각보다 정답 비율이 낮네요. 그 이유는 아래의 설명을 보면 알 수 있습니다. 

 

 


그대로 출력하기 입출력 예시


입력은 최대 100줄로 되어있다고 합니다. 또한 빈줄은 주어지지 않습니다. 공백으로 끝나지도 않습니다. 

여기서 중요한 점은 입력이 최대 100줄일뿐, 1줄이 들어올수도, 10줄이 들어올수도, 100줄이 들어올수도 있습니다. 그러므로, 입력이 주어지지 않을때까지만 입출력을 해주어야 합니다. 

스위프트에서는 해당 문제를 어떻게 풀 수 있을까요? 바로 옵셔널 바인딩을 사용하는 것입니다. 
스위프트에서 문자열 입력을 받을때는 readLine() 함수를 사용합니다. 해당 메서드의 반환 타입은 String? 입니다. 스위프트는 옵셔널이라는 개념이 있습니다. 이는, 해당 값이 없을 수도(nil), 있을 수도 있다는 것인데요. 

즉, readLine() 메서드의 반환값은 String 타입의 값이 있을 수도, 값이 nil일수도 있다는 것입니다. 우리는 이를 입력값이 없는지(nil), 있는지(String 값)로 판단해볼 수 있습니다. 

옵셔널 바인딩은 특정 옵셔널 타입 값이 존재하는지, 없는지에 따라 분기처리를 하는 방법입니다.
보통 swift에서는 if let, guard let을 사용하는데요. 저는 guard let 을 사용해서 문제 풀이를 작성해보겠습니다. 

 

 

 


그대로 출력하기 문제풀이


위에 작성된 코드는 아래와 같이 설명이 될 수 있습니다.

"최대 100줄의 입력이 주어질 수도 있고, 입력 받는 대로 출력을 해!"
"근데 만약 도중 입력값이 없으면 더이상 입력 받지말고 종료해!"

만약 10줄의 입력 이후, 더이상의 입력이 없다면, 입력 끝에 다다랐다면, 그 이상의 반복문은 실행되지 않고 종료 됩니다. 

if let 을 사용해도 이런 표현은 문제가 없겠죠?? 
그 외에도 반복문 수행 간 옵셔널 바인딩할 수 있는 방법이 있습니다. 바로 while let 인데요. 그 코드는 아래와 같습니다. 

 

 

 

while let input = readLine()

해당 줄은 "입력 값이 주어질때까지 반복해서 수행해" 라는 의미가 됩니다. 이렇게 입력의 끝까지 실행 후 종료하게 되는 코드가 됩니다.

이렇게 입력받는 줄 만큼 그대로 출력하는 코드를 작성해 보았습니다. 

위의 구현 방식을 다시한번 정리하자면,
if let / guard let / while let 등으로 입력값이 있는지를 확인하는 분기를 사용합니다.
-> 그렇게 입력 받는 줄이 있을때까지 입력 문자열 내용을 그대로 출력해줍니다.

그렇게 결과적으로 해당 문제, "그대로 출력하기"를 풀 수 있었습니다. 그렇게 코드 제출 결과는 아래와 같습니다. 🤗

 

 



 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함