_ 18406 - 럭키 스트레이트

Zion·2021년 12월 13일
1

난이도 : ★☆☆☆☆
사용언어 : Swift
문제

쉬운 문제임에도 작성한 이유

Input read

C++ 로 풀때는 input값을 그냥 콘솔 창에다 치면 됐었다.
하지만 Playground로 푸려니 input값 받아 오는것에서 부터 막혔다.
적어놓으면 덜 까먹어도 찾아보니까 정리해놓는다.

import Foundation
let input = readLine()

readLine을 쓰면 된다고 하는데.. 나는 궁금하다 readLine이 어디까지 읽는건지.
\n이 포함된 String은 어쩔껀데? 해서 찾아봤다.

readLine ?

  • 어디까지 읽는겨
  • 사용법

► 어디까지 읽는겨

음음 String? optional로 return하네.

설명 주석을 읽어보자

Return a string read from standard input through the end of the current line or EOF is reached.

  • 현재 줄의 끝
  • EOF : 파일 끝(End of File, EOF)는 데이터 소스로부터 더 이상 읽을 수 있는 데이터가 없음을 나타낸다.

이라한다.

한번 보자고.


줄 읽는다 정말.

► 사용법
return 이 optional(String?)이기 때문에 optional binding 해서 사용한다.

let input = readLine()
if let str = input {
    // do smt with `str`
}

String to Array

문제를 책으로 봐서 일단 책에다가 생각나는 풀이를 적었었다.
C++에서 처럼 String을 Array로 바꿔준다는 생각으로 풀었는데 Swift에선 언젠가 해본적이 있는거 같은데 무지성으로 했나보다 기억이 안난다. 그래서 찾아봤다.
방법은 세가지 있다고 한다.

let name = "King"

//1.
let arr = Array(name)
//Print arr : ["K", "i", "n", "g"]

//2.
let mapArr = name.map { String($0) }
//Print mapArr : ["K", "i", "n", "g"]

//3.
var appendCharArr = [Character]()

for char in name{
    appendCharArr.append(char)
}
//Print appendCharArr : ["K", "i", "n", "g"]

이런 방법이 있다고 한다.

sol

code

func sol(string input: String) {
    var arr = input.map { String($0) }

    let length = arr.count

    var leftSum = 0
    var rightSum = 0
    for _ in 0..<length / 2 {
        let leftSide = arr.removeFirst()
        let rightSide = arr.removeLast()

        guard let leftComponent = Int(leftSide),
              let rightComponent = Int(rightSide) else { return }
        leftSum += leftComponent
        rightSum += rightComponent

    }
    
    if leftSum == rightSum {
        print("LUCKY")
    } else {
        print("READY")
    }
}

해설

  1. input(string) to array
  2. string length 알아내서 /2 만큼만 for문 돌리기로 함.
  3. input length 가 문제에서 짝수라고 명시돼있어서 다른 처리 안함.
  4. 왼쪽 : remove First. 오른쪽 : remove Last. 해서 String to Int 하는걸 문서에서 'uses the initializer to try to convert a String into an Int'라고한다. Int의 initializer를 이용해 이게(String) Int로 바뀔 수 있는지 아닌지(nil) 반환해 주나보다.
    guard let을 이용해서 nil이면 return 하게 해준다 ~

정리

풀이는 쉬웠는데 Swift로 처음 풀어서 이렇게 적을게 많아졌다고 한다.

profile
어제보다만 나아지는

0개의 댓글