본문 바로가기
알고리즘/문제풀이

[백준](Swift) 입출력과 사칙연산

by venniek 2022. 5. 10.

백준 '단계별로 풀어보기'에서 1단계부터 하나씩 풀어봤다.
(번호를 클릭하면 문제 링크로 연결됩니다.)

2557 Hello World

가장 간단한 출력을 해볼 수 있는 문제. C++에서 main 함수를 따로 만들었던 것과 다르게 스위프트는 그냥 명령하면 된다.

print("Hello World!")

10718 We love kriii

주어진 문장을 두 번 출력한다. 스위프트의 print() 함수는 기본으로 문장 끝에 개행을 해주기 때문에 그냥 두 번 print 해주면 된다. 문장이 같기 때문에 반복문을 사용해도 된다.

print("강한친구 대한육군")
print("강한친구 대한육군")
for _ in 0..<2 { print("강한친구 대한육군") }

10171 고양이

특수문자들로 고양이 모양을 출력하는 문제. 이 문제를 풀기 위해서는 백슬래시(\)를 알아야 한다.

백슬래시는 이스케이프 문자로 뒤에 붙은 문자를 문자 그대로 표현하지 않고 다른 문자로 변환한다. 특정 기능을 하는 문자 앞에 백슬래시를 붙여 그 문자 그대로 써줄 때도 사용한다.

이 문제에서는 신경써야 하는 문자가 \ 밖에 없으니(는 그냥 출력할 수 있다) 출력 예시의 백슬래시 앞에 백슬래시를 하나 더 써준다.

print("\\    /\\")
print(" )  ( ')")
print("(  /  )")
print(" \\(__)|")

25083 새싹

위 고양이 문제와 거의 비슷한데, 주의해야 하는 문자가 조금 늘었다. 특수한 기능을 하는 문자들이 문자 그 자체로 출력될 수 있도록 백슬래시를 붙여준다.

print("         ,r'\"7")
print("r`-_   ,'  ,/")
print(" \\. \". L_r'")
print("   `~\\/")
print("      |")
print("      |")

1000 A+B, 1001 A-B, 10998 A*B

드디어 입력을 받는다! 한 줄에 숫자 2개가 들어오니까 [Int]로 만들고 인덱스로 참조해서 가져온다.

component 메소드를 쓰기 때문에 Foundationimport 해야 한다.

import Foundation 

let nums = readLine()!.components(separatedBy: " ").map{ Int($0)! }
print(nums[0] + nums[1])

1001, 10998 두 문제는 위의 1000번 문제와 거의 동일하다.

// 1001
import Foundation 

let nums = readLine()!.components(separatedBy: " ").map{ Int($0)! }
print(nums[0] - nums[1])

// 10998
import Foundation 

let nums = readLine()!.components(separatedBy: " ").map{ Int($0)! }
print(nums[0] * nums[1])

1008 A/B

나누기는 답이 정수가 아닐 수 있다. 처음에는 Int로 받은 후 앞의 숫자를 (Double)을 이용해 형변환했는데, 스위프트는 자료형에 예민해서 다른 자료형끼리의 계산은 해주지 않기 때문에 오류가 났다. 두번째 숫자에도 형변환을 하니 코드가 길어져서, 아예 처음에 입력받을 때 형변환을 Double로 해줬다. 나머지는 위의 문제와 거의 비슷하다.

import Foundation

let nums = readLine()!.components(separatedBy: " ").map{ Double($0)! } 
print(nums[0] / nums[1])

10869 사칙연산

위의 계산을 전부 출력하고, 나머지 연산까지 출력해준다. 이번에는 나누기에서 몫만 가져오니까 Int로 계산해도 괜찮다. 이번에는 각 숫자들을 다섯 번 사용하기 때문에 따로 변수에 넣어준 후 계산했다.

import Foundation

let nums = readLine()!.components(separatedBy: " ").map{ Int($0)! }
let a = nums[0]
let b = nums[1]
print(a + b)
print(a - b)
print(a * b)
print(a / b)
print(a % b)

10926 ??!

한 줄 입력받고, 그 뒤에 “??!”을 붙여주기만 하면 된다.

let str = readLine()! + "??!"
print(str)

18108 1998년생인 내가 태국에서는 2541년생?

입력받은 수에서 543(2541 - 1998)을 뺀 수를 출력하면 된다. 입력이 1000 이상이기 때문에 음수가 될 일은 없다.

let y = Int(readLine()!)!
print(y - 543)

10430 나머지

수학적으로 (A + B) % C((A % C) + (B % C)) % C 와 같다. (A × B) % C((A % C) × (B % C)) % C 와 같다.

어차피 같은 수를 출력하는 거니까 계산해서 변수에 저장해두고 두 번씩 출력한다.

import Foundation

let nums = readLine()!.components(separatedBy: " ").map{ Int($0)! }
let a = (nums[0] + nums[1]) % nums[2]
let b = (nums[0] * nums[1]) % nums[2]
print(a)
print(a)
print(b)
print(b)

2588 곱셈

첫 번째 수에 두 번째 수의 각 자리수를 곱한 수들을 출력하고, 최종적으로 두 수의 곱을 출력한다.

처음에는 반복문 안에서 b(두 번째 수) % 10을 곱해주고 b += b / 10 하려고 했는데 그렇게 하면 원래 숫자가 없어져서 마지막 곱을 구하기가 어렵다. 그래서 어차피 세 자리밖에 안 되니까 b는 가만히 두고 나머지와 몫을 이용해서 계산해줬다.

import Foundation

let a = Int(readLine()!)!
let b = Int(readLine()!)!
print(a * (b % 10))
print(a * (b % 100 / 10))
print(a * (b / 100))
print(a * b)

'알고리즘 > 문제풀이' 카테고리의 다른 글

[백준] (Swift) 2675 문자열 반복  (0) 2022.07.11
[백준](Swift) 1차원 배열  (0) 2022.06.04
[백준](Swift) 반복문  (0) 2022.05.28
[백준](Swift) 조건문  (0) 2022.05.13
[백준] (C++) 5567 - 결혼식  (0) 2022.01.12

댓글