Today I Learned

20210810 - 백준 문제풀이 (입출력과 사칙연산1)

돌맹이시터 2021. 8. 11. 01:41

 

단계별 문제풀이 시작

 

입출력과 사칙연산 1~8을 풀어보면서 정리한 내용들

 

 

출력 시 \(back slash)는 바로 뒤에 오는 문자와 더불어 escape sequence를 만들 수 있기 때문에,

\을 단독으로 사용하면 에러가 발생한다.

 

가령, print("\ /\")의 경우 

"\\ /\\" 으로 입력해주어야 한다.

 

 

백슬래시 외에도 명령어처럼(?) 사용되는 문자기호의 경우 앞에 

4번 문제인 개 그림..을 출력할 때 나오는

"의 경우를 예를 들어보면, 프린트함수 내부에서 사용되는 문자이기 때문에 

단독으로 사용하지 않고 \를 앞에 붙여줘야 정상적으로 출력되는 것을 확인할 수 있었다.

 

print("( 0 )"""\")

대신

print("( 0 )\"\"\"\\") 이라고 작성해줘야 정상적으로 출력된다.

 

 

 

 

5번 문제부터는 입력받은 숫자를 가지고 사칙연산을 해야하는데,

무언가를 입력받아서 리턴하는 방법을 잘 몰라서 헤맸었다.

 

readLine() 을 통해 입력받은 내용을 String으로 전달받을 수 있다.

 

import Foundation
let arr = readLine()!
let arrs = arr.components(separatedBy: " ")
let a = Int(arrs[0])!
let b = Int(arrs[1])!

print(a+b)

 

 

 

위와 같이 코드를 작성해줬는데,

arr에 입력받은 문자열을 리턴하고

arrs에서 arr 문자열을 공백을 기준으로 구분해서 배열을 만들었다.

 

스위프트에서는 optional이라는 개념 때문에 답답한 경우가 많은데..

초보자이기 때문이겠지...

 

 

문자열을 특정 조건으로 나누어서 배열에 저장하는 방법은 여러 가지가 있는데,

components를 사용하는 경우 Foundation이라는 프레임워크를 불러와야 하고, 시간도 오래 걸리지만

직관적으로 사용하기가 용이했다.

 

 

 

 

5,6,7번 문제는 거의 유사한 문제였는데

문제는 8번이었다.

 

 

입력받은 두 수로부터 A/B를 출력해야 하는데,

컴파일까지는 정상적으로 되었지만 자꾸 틀렸다고 나왔다.

 

Int로 계산하면 답이 다르게 나오기 때문에 Float로 코드를 작성했었는데,

문제에 힌트가 있었다. - 실제 정답과 출력값의 절대오차 또는 상대오차가 10^-9 이하이면 정답이다.

 

 

float의 경우 7자리까지, double의 경우 16자리까지 오차없이 표현할 수 있다고 한다.

 

 

import Foundation

let arr = readLine()!
let arrs = arr.components(separatedBy: " ")
let a = Double(arrs[0])!
let b = Double(arrs[1])!

print(a/b)

 

 

double type으로 계산했더니 정답이 나왔다.

 

'Today I Learned' 카테고리의 다른 글

20210812 split vs components 정리  (0) 2021.08.12
20210811 백준 문제풀이 (입출력과 사칙연산2)  (0) 2021.08.12
20210727  (0) 2021.07.28
20210725 BMI calculator project -4  (0) 2021.07.26
20210722 BMI calculator project-3  (0) 2021.07.23