[알고리즘/Swift] 0201 320개
문제
훈련된 초밥 장인이 한 번 초밥을 쥘 때 담는 밥알은 320개라고 알려져 있다.
일식집에서 아르바이트를 하는 준식이는 N 개의 초밥을 열심히 만들어 보았지만 각 초밥에 담긴 밥알의 개수가 제각각이었다.
이 중에서 그나마 밥알의 개수가 320개에 가장 가까운 초밥 하나를 손님에게 내놓으려고 한다. 준식이는 몇 번째 초밥을 내놓아야 할까?
입력
첫째 줄에 초밥의 개수 N (1 ≤ N ≤ 100) 이 주어진다.
둘째 줄에 A[1], A[2], … , A[N] (1 ≤ A[i] ≤ 1 000) 이 주어진다. i 번째 초밥의 밥알의 개수는 A[i] 개다.
출력
밥알의 개수가 320개에 가장 가까운 초밥은 몇 번째 초밥인지 출력한다. 만약 이러한 초밥이 여러 개 있다면 가장 앞서는 것을 출력한다.
//입력 :
4
480 310 350 220
//출력 :
2
풀이
만든 스시들을 for문을 돌면서 각각 스시들의 밥알 개수과 320와의 절대값 차를 새로운 배열에 넣는다
그 절대값 차들로 구성되어 있는 배열의 최솟값이 있는 index를 출력한다
알게된 점
- Array.min()
- 최솟값이 여러 개이면 가장 앞에 있는 값 반환
- 1 이상부터 고려 ([1,2,3,4,0] -> 1이 최솟값)
- Optional
값 반환
- Array.index(of:)
- Array
.Index는 Optional 형을 반환하므로 !을 통해 강제 언래핑을 해주었다
- Array
- 절대값 반환하기
- abs :
method
형식, returnType :Int
- magnitude :
Property
특성, returnType :UInt
- abs :
let integer : Int = -34
let magnitudeInt = integer.magnitude
let absInt = abs(integer)
print(magnitudeInt, type(of: magnitudeInt))
//출력 : 34 UInt
print(absInt, type(of: absInt))
//출력 : 34 Int
코드
import Foundation
let N : Int = Int(readLine()!)!
let sushi : [Int] = readLine()!.split(separator : " ").map{Int(String($0))!}
var arr : [Int] = []
for s in sushi {
arr.append(abs(320-s))
}
print(arr.index(of: arr.min()!)!+1)