코딩테스트 시작 - 입출력과 사칙연산

인생노잼시기·2021년 4월 28일
0

😨코딩테스트

목록 보기
1/18
  • 그리디
  • 구현
  • dfs/bfs
  • 정렬
  • 이진 탐색
  • 다이나믹 프로그래밍
  • 최단 경로
  • 그래프 이론

언어변경: 파이썬에서 스위프트로

나동빈님의 이것이 취업을 위한 코딩 테스트다로 공부하고 있었다
책도 1회독정도는 끝내고...
파이썬이 좋다고 해서
파이썬으로 시작했었는데

아무래도 스위프트로 해야
스위프트에 대해 알 수 있겠지...
스위프트로 준비 시작한다...😭
나 화이팅!!!

시작이 반이라는데
세팅부터 시작한다

스위프트 알고리즘 클럽

https://github.com/raywenderlich/swift-algorithm-club/

키보드로 사용자입력input 받기

플레이그라운드는 샌드박스이기 때문에 input이 없다
(샌드박스(sandbox)란 외부로부터 들어온 프로그램이 보호된 영역에서 동작해 시스템이 부정하게 조작되는 것을 막는 보안 형태이다)
입력을 받을 수 있는 방법은 actual application을 이용하는 것이다.

macOS > Command Line Tool
언어는 swift로 설정해서 프로젝트 생성하기

main.swift파일만 컴파일하기


Target Membership에서 체크를 해제하면
해당 파일이 프로젝트에서 제외된다.
그러니까 newFile.swift파일을 생성하고 체크를 해제하면 컴파일하지 않는다.
main.swift파일을 만들어서 그것만 컴파일하게 해서 사용하면 된다!
한 프로젝트 내에서 main.swift파일은 한 개만 생성할 수 있기 때문이다

main.swift파일을 생성해야 하는 이유는? (액세스포인트)
애플에서 가장 먼저 실행시키기로 정한 파일이기 때문이다(순서가 정해져 있다. 그걸 최상위 코드라고 부른다)
다른 파일부터 실행시키려고 하면 아래와 같은 오류가 발생한다

오류
Expressions are not allowed at the top level

애플 공식문서
https://developer.apple.com/swift/blog/?id=7

풀었던 문제 파일의 이름을 main.swift가 아니라 다른 걸로 변경해서 저장하고 Target Membership에서 제거한 뒤
main.swift를 생성해서 문제를 풀면된다

Xcode프로젝트를 생성하면
main.swift파일부터 안읽는다고 생각할 수 있는데
Appdelegate.swift파일에 보면
@UIApplicationMain 어노테이션이 그 기능을 대신해주고 있다.

백준 단계별 풀이 다시 시작

  • 하루 세 문제 풀기를 목표로 한다
  • 스위프트 프로젝트를 생성하고 git에 올린다.
  • 그리고 기억할만한 사항은 여기에 정리해서 복습한다.

아래 형식으로

입출력과 사칙연산

10171

10171
특수문자 사용하기
여러줄 한꺼번에 print하기 #""" """#

let cat = #"""
print("\\    /\\")
print(")  ( ')")
print("(  /  )")
print("\\(__)|")
"""#

print(cat)

1000

1000
컴파일: swiftc -O -o Main Main.swift
실행: ./Main

import Foundation

let line = readLine()!
let lineArr = line.components(separatedBy: " ")
let a = Int(lineArr[0])!
let b = Int(lineArr[1])!
print(a+b)

MVC 패턴 적용하기

!는 지향하는 방향으로 코드를 작성해야한다
MVC 패턴은 그냥 기본이다...
갑자기 너무 길어져서 눈물이 다 난다
그 동안 내가 했던 건 뭐지...

// MVC 패턴

// view
func inputView() -> String {
    
    guard let value = readLine() else {
        return ""
    }
    return value
}

func outputView(value: Any) {
    print("\(value)")
}

// controller
func stringToArray(value: String) -> [String] {
    return value.components(separatedBy: " ")
}

func stringToInt(value: String) -> Int {
    guard let value = Int(value) else {
        return 0
    }
    return value
}

func sum(first: Int, second: Int) -> Int {
    return first + second
}

struct Model {
    let first: Int
    let second: Int
}

func main() {
    // view
    let inputValue = inputView()
    
    // controller
    let array = stringToArray(value: inputValue)
    let first = stringToInt(value: array[0])
    let second = stringToInt(value: array[1])
    
    // model
    let model = Model(first: first,
                      second : second)
    
    // controller
    let result = sum(first: model.first, second: model.second)
    
    // view
    outputView(value: result)
}

main()

1008

1008
나눗셈 하기
그냥 나누면 1/3하면 0
그냥 Int로 처리된다
스위프트의 나눗셈은 부동소수점도 처리해주지만 정수형태로 리턴한다.

import Foundation

let line = readLine()!
let lineArr = line.components(separatedBy: " ")
let a = Int(lineArr[0])!
let b = Int(lineArr[1])!
print(Double(a)/Double(b))

2588

2588
Int()의 리턴값은 Optional이라서 !Unwrap해줬다
/는 몫을 리턴

import Foundation

let lineA = readLine()!
let lineB = readLine()!
let numberA = Int(lineA)!   
let numberB = Int(lineB)!

print(numberA * (numberB%10))
print(numberA * (numberB%100/10))
print(numberA * (numberB/100))
print(numberA * numberB)
profile
인생노잼

0개의 댓글