✔︎저는 해답을 모르는 상태에서 일단 배운대로 문제를 풀고,
잘 모르거나 궁금한 경우에 hint를 참고했기 때문에 풀이 방법이 매우 다를 수 있으며 이 방법이 정답은 아닙니다.
✔︎초보이기 때문에
더 깔끔하거나, 속도가 빠른 방식이 분명 존재할 것입니다.
저도 궁금하기 때문에 어떤 방식으로 풀었는지 댓글 달아주시면 감사하겠습니다! ><
import Foundation
import Cocoa
//여러분의 목표는 다음과 같은 Swift 플레이그라운드를 작성하는 것입니다:
//모든 온도를 섭씨로 유지하는 상수를 생성합니다.
//Celsius is commonly stored as a decimal, so make sure and create it as one. This might mean adding “.0” to the end – using 25.0 rather than 25, for example.
let Celsius = 1.0
//9를 곱하고 5로 나눈 다음 32를 더하여 화씨로 변환합니다.
let Fahrenheit = Celsius * 9 / 5 + 32
//사용자에게 섭씨와 화씨 값을 모두 표시하는 결과를 출력합니다.
//you can use Option+Shift+8 to get the degrees symbol: °.
print("Celsius :\(Celsius), Fahrenheit: \(Fahrenheit)°.F")
계산식의 기초와 Constant(let)와 variable(var)에 대해 배웠다.
let은 변하지 않는 값을 저장할 때 쓰고,
var은 변하는 값, 값을 채워넣어야 할 때 쓴다.
= (대입)과 *% 등 계산 과정은 다른 코딩 언어와 동일했다.
import Foundation
var array = Array<String>()
array.append("What")
array.append("How")
array.append("What")
//number of items
print(array.count)
//number of unique item
var uniqueItem : Int = 0
if (!array.isEmpty){
for i in 0..<array.count - 1 {
for j in i+1..<array.count {
if array[i] == array[j] {
uniqueItem += 1
}
}
}
uniqueItem = array.count - uniqueItem
}
print(uniqueItem)
//set 활용 풀이
var item = [String]()
item.append("Something")
item.append("unique1")
item.append("unique2")
item.append("Something")
print(item.count)
print(Set(item).count)
Array와 set의 차이점(set은 중복값 허용하지 않음)을 이용하여 아래 set활용 코드처럼 형변환을 통해 고유한 리스트 안의 값의 갯수(count함수 이용)를 출력하라는 문제였는데 아무 생각없이 풀었을 때는 위에 코드처럼 if랑 for을 완전 4번이나 중첩해서 풀었다.
하나씩 값을 비교해서 동일값이 있는지 그 갯수를 세서 일치하는 값이 있는지 저장을 해둔다음에 그 저장된 값의 갯수를 전체 값에서 제거하는 방식으로 풀었는데 값은 제대로 나오긴 한다.
import Foundation
for number in 1...100 {
//If it’s a multiple of 3 and 5, print “FizzBuzz”
if number.isMultiple(of: 3) && number.isMultiple(of: 5) {
print("FizzBuzz")
}
//If it’s a multiple of 5, print “Buzz”
else if number.isMultiple(of: 5) {
print("Buzz")
}
//If it’s a multiple of 3, print “Fizz”
else if number.isMultiple(of: 3) {
print("Fizz")
}
else {
print("\(number)")
}
}
3의 배수이면 피즈, 5의 배수이면 버즈, 3과 5의 배수이면 피즈버즈를, 아무것도 아니면 숫자 자체를 출력하라는 문제였다.
순서대로 작성하다가 if랑 else if 편의를 위해 순서를 3과 5 공통 배수부터 구하는 걸로 바꿨다.
import Foundation
//enum error
enum sqrt_Error : Error {
case outofbounds, noroot
}
//1. sqrt() 구현하기
func number_sqrt(_ number : Int) throws -> Int {
if number > 10_000 || number < 1 {
throw sqrt_Error.outofbounds
}
var value = 0
for i in 1...number {
if i * i == number {
value = i
}
}
if value == 0 {
throw sqrt_Error.noroot
}
return value
}
try number_sqrt(394)
정수의 제곱근을 구하는 문제이지만 에러처리가 가능한 함수를 만드는 문제였다.
throws로 에러처리가 있음을 밝혀놓고,
enum에 미리 들어오는 수가 10,000이상이거나 1이면 outofbounds로 처리하고 모든 값에 대한 처리(확인)을 끝내고도 답이 않나오는 경우 (i가 기본값을 유지할 경우) no root로 에러처리를 하게 했다.
return 값을 제대로 밖에 두지 않으면 글로벌 반환값(if문 바깥에는 반환이 없었다)이 없다고 에러코드가 계속 뜨기 때문에 value를 만들어서 값을 저장 후 반환하게 했다.
import Foundation
let luckyNumbers = [7, 4, 38, 21, 16, 15, 12, 33, 31, 49]
// Filter out any numbers that are even
// Sort the array in ascending order
//Map them to strings in the format “7 is a lucky number”
//Print the resulting array, one item per line
luckyNumbers.filter{ $0 % 2 == 1 }.sorted().map { print("\($0) is lucky number") }
//I don't use isMultiple(of:), just calculate even.
//I don't know which is better option
filter에 trailing closures로 함수가 해야할 계산 식을 줬다.
shorthand syntax(단축 구문)인 $0으로 들어오는 값을 계산했고, true값인 값만 다시 저장되기 때문에 ==1이라고 홀수라고 명시했다.
힌트를 읽었을 때는 isMultiple(of:) 함수를 쓰라고 되어있었는데 그냥 %2 (2로 나눈 나머지)가 1인 것으로 처리했다. sorted()는 closure를 써주기에는 어차피 오름차순이 기본값이라서 그냥쓰고 map에 바로 print를 줘서 안에 하나씩 값이 들어오고 출력하게 했다.
map은 배열의 값 하나하나를 받아서 바로 계산하는 데 쓰는데 결과값도 자동 리스트에 저장해줘서 처음에는 print 안에 값들을 다 넣고 map으로는 해당 문자열로 변환만 해줬다가 한 값마다 줄바꿈을 줘야 하는데 그럼 식이 길어져서 그냥 안에 프린트를 넣었다.