문제

 

풀이 코드

func solution(_ x:Int, _ n:Int) -> [Int] {
    var listArray: [Int] = [x];
    for _ in 0..<n-1 {
        listArray.append(listArray.last! + x)
    }
    return listArray
}

 

풀이 과정

for 반복문을 이용하여 x 만큼 계속 더해주었고,

Array.last 를 이용하여 마지막 값에 누적 합산 해 주었다!

 

다른사람의 풀이

func solution(_ x:Int, _ n:Int) -> [Int64] {
    return Array(1...n).map { Int64($0 * x) }
}

고차함수를 생각하자!!

map 이라는 메서드가 있다!

swift는 이제 막 공부를 다시 시작한거라 문법을 좀 익힐 필요가 있을 것 같다

문제

 

풀이 코드

import Foundation

let n = readLine()!.components(separatedBy: [" "]).map { Int($0)! }
let (a, b) = (n[0], n[1])

for _ in 0..<b {
    for _ in 0..<a{
        print("*",terminator: "")
    }
    print()
}
/*
 문제
 양수 A가 N의 진짜 약수가 되려면, N이 A의 배수이고, A가 1과 N이 아니어야 한다. 어떤 수 N의 진짜 약수가 모두 주어질 때, N을 구하는 프로그램을 작성하시오.
 
 입력
 첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되지 않는다.
 
 출력
 첫째 줄에 N을 출력한다. N은 항상 32비트 부호있는 정수로 표현할 수 있다.
 
 */
import Foundation
let inputCount = readLine().map{Int($0)!}!
var inputNum = readLine()!.components(separatedBy: " ").map{Int($0)!}

if inputCount == 1 {
    print(inputNum[0]*inputNum[0])
} else {
    let even = (inputNum.count / 2)
    inputNum = inputNum.sorted()
    if inputNum.count % 2 == 0 {
        print(inputNum[even] * inputNum[even - 1])
    } else {
        print(inputNum[even - 1] * inputNum[even + 1])
    }
}

알고리즘 문제를 많이 풀어봐야 겠다고 느낀 문제..

 

문제를 보고 무슨뜻인지 잘 이해가 안되서 한참을 쳐다봤다 ㅋㅋㅋ

해당 풀이 방법은 이렇게 수행된다

 

1. 약수의 갯수가 1개이면 고민할 필요도 없이 해당 값을 제곱하여 출력하면 된다

2. 약수의 갯수가 2개 이상이라면 입력받은 배열을 정렬하고,[ 갯수 / 2 ] 를 하여 배열의 중간값위치를 구한다!

3. 약수의 갯수가 짝수 라면 중간값의 계산한 [ 인덱스의 값 * 이전 인덱스의 값 ] 을 하여 구한다!

4. 약수의 갯수가 홀수 라면 중간인덱스의 [ 이전 값 * 이후 값 ] 을 수행하여 구한다!

/*
 문제
 2와 5로 나누어 떨어지지 않는 정수 n(1 ≤ n ≤ 10000)가 주어졌을 때, 1로만 이루어진 n의 배수를 찾는 프로그램을 작성하시오.
 
 입력
 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, n이 주어진다.

 출력
1로 이루어진 n의 배수 중 가장 작은 수의 자리수를 출력한다.
 
 */
import Foundation
//while let input = readLine() {
//    var one = "1"
//    while Int(one)! % Int(input)! != 0 {
//        print(one)
//        one.append("1")
//    }
//    print(one.count)
//}

while let input = readLine() {
    var one = 1
    var count = 1
    while one % Int(input)! != 0 {
        one = one * 10 + 1
        one %= Int(input)!
        count += 1
    }
    print(count)
}

 

단순히 문자열에 "1" 을 추가하고, 해당 문자열의 길이를 출력하는 방법으로 풀었으나 Runtime 오류가 발생했다.

실행 할때마다 결과값이 잘 나와서 왜 안되는지 한잘 머리를 굴렸다.. ( 주석처리한 부분! )

 

그리고 11113 같은 큰 수를 넣었더니.. 에러가 발생했다!!

 

이유는 Int 형의 범위를 넘어가서 오류가 발생하는 거였다..

 

그래서 어떻게 하지 고민하다가..

 

input으로 들어온 값으로 나눈 나머지로 계산하는 방식을 고안해 냈다..

 

왜 저렇게 고안했는지는 디버깅 몇번 해보면 알게 될것이당...

저렇게 계산하면 최대 범위를 넘어갈 일도 없을 뿐더러 계산도 차이없이 잘 된다!

/*
 문제
 (A+B)%C는 ((A%C) + (B%C))%C 와 같을까?

 (A×B)%C는 ((A%C) × (B%C))%C 와 같을까?

 세 수 A, B, C가 주어졌을 때, 위의 네 가지 값을 구하는 프로그램을 작성하시오.
 
 입력
 첫째 줄에 A, B, C가 순서대로 주어진다. (2 ≤ A, B, C ≤ 10000)
 
 출력
 첫째 줄에 (A+B)%C, 둘째 줄에 ((A%C) + (B%C))%C, 셋째 줄에 (A×B)%C, 넷째 줄에 ((A%C) × (B%C))%C를 출력한다.
 
 */
import Foundation
let inputArr = readLine()!.components(separatedBy: " ").map{Int($0)!}
let A = inputArr[0], B = inputArr[1], C = inputArr[2]
print((A + B)%C)
print(((A%C) + (B%C))%C)
print((A*B)%C)
print(((A%C) * (B%C))%C)

설명할 사항이 딱이 없는거 같다.

한가지만 알아두자!

 

Swift 에서 readLine() 으로 입력을 받을수 있음

components(separatedBy: " ") 로 " " 기준으로 나누어 저장함

map 함수를 이용하여 Int 형 배열로 저장!

+ Recent posts