분해합 성공다국어

한국어   
시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 192 MB 96282 44135 34850 45.436%

문제

어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다.

자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오.

입력

첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다.

출력

첫째 줄에 답을 출력한다. 생성자가 없는 경우에는 0을 출력한다.

예제 입력 1 복사

216

예제 출력 1 복사

198

코드

import Foundation

let N = Int(readLine()!)!
var res = 1

for i in 0 ..< N{
    var temp = i
    var sum = 0
    while( temp != 0){
        sum += temp % 10
        temp /= 10
    }
    if (sum + i == N){
        res = i
        break
    }
}
print(res)

출처

ICPC > Regionals > Asia Pacific > Korea > Asia Regional - Seoul 2005 B번

https://www.acmicpc.net/

 

Baekjoon Online Judge

Baekjoon Online Judge 프로그래밍 문제를 풀고 온라인으로 채점받을 수 있는 곳입니다.

www.acmicpc.net

 

'iOS > 백준' 카테고리의 다른 글

Swift 백준 2751번) 수 정렬하기 2  (0) 2022.08.09
Swift 백준 10989번) 수 정렬하기 3  (0) 2022.08.09
Swift 백준 10828번) 스택  (0) 2022.08.05
Swift 백준 4153번) 직각삼각형  (0) 2022.08.05
Swift 백준 1259번) 팰린드롬수  (0) 2022.08.05

스택 성공

 
시간 제한메모리 제한제출정답맞힌 사람정답 비율
0.5 초 (추가 시간 없음) 256 MB 166534 58012 42344 37.323%

문제

정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

명령은 총 다섯 가지이다.

  • push X: 정수 X를 스택에 넣는 연산이다.
  • pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • size: 스택에 들어있는 정수의 개수를 출력한다.
  • empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
  • top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.

입력

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.

출력

출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.

예제 입력 1 복사

14
push 1
push 2
top
size
empty
pop
pop
pop
size
empty
pop
push 3
empty
top

예제 출력 1 복사

2
2
0
2
1
-1
0
1
-1
0
3

 

코드

import Foundation

public struct Stack<T>{
    private var elements = [T]()
    public init() {}
    
    public mutating func push(_ element: T){
        self.elements.append(element)
    }
    
    public mutating func pop() -> T? {
        return self.elements.popLast()
    }
    
    public func top() -> T? {
        return self.elements.last
    }
    
    public func empty() -> Bool {
        return self.elements.isEmpty
    }
    
    public var size: Int {
        return self.elements.count
    }
}

var myStack = Stack<Int>()
var arr : [String] = []

let input = Int(readLine()!)!

for _ in 0 ..< input {
    arr.append(readLine()!)
}

for i in 0 ..< input {
    var narr = arr[i].split(separator: " ")
    if narr[0] == "top"{
        let top = myStack.top()
        if top == nil{
            print(-1)
        }else{
            print(top!)
        }
    }
    if narr[0] == "size"{
        print(myStack.size)
    }
    if narr[0] == "pop"{
        let pop = myStack.pop()
        if pop == nil {
            print(-1)
        }else{
            print(pop!)
        }
    }
    if narr[0] == "empty"{
        if myStack.empty() == true{
            print(1)
        }else{
            print(0)
        }
    }
    if narr[0] == "push"{
        let n : Int = Int(narr[1])!
        myStack.push(n)
    }
    narr.removeAll()
}

 

출처

'iOS > 백준' 카테고리의 다른 글

Swift 백준 10989번) 수 정렬하기 3  (0) 2022.08.09
Swift 백준 2231번) 분해합  (0) 2022.08.08
Swift 백준 4153번) 직각삼각형  (0) 2022.08.05
Swift 백준 1259번) 팰린드롬수  (0) 2022.08.05
Swift 백준 1181번) 단어 정렬  (0) 2022.08.05

직각삼각형 성공다국어

한국어   
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 128 MB 58795 30061 26812 50.905%

문제

과거 이집트인들은 각 변들의 길이가 3, 4, 5인 삼각형이 직각 삼각형인것을 알아냈다. 주어진 세변의 길이로 삼각형이 직각인지 아닌지 구분하시오.

입력

입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다. 각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다.

출력

각 입력에 대해 직각 삼각형이 맞다면 "right", 아니라면 "wrong"을 출력한다.

예제 입력 1 복사

6 8 10
25 52 60
5 12 13
0 0 0

예제 출력 1 복사

right
wrong
right

 

코드

import Foundation

while true {
    let inputs = readLine()!.split(separator: " ").map { Double(String($0))! }.sorted()
    let a = inputs[0]
    let b = inputs[1]
    let c = inputs[2]
    
	// a, b, c가 0 0 0이면 탈출
    guard a + b + c != 0 else { break }

    if pow(a, 2) + pow(b, 2) == pow(c, 2) {
        print("right")
    } else {
        print("wrong")
    }
}

 

출처

Contest > Waterloo's local Programming Contests > 2 October, 2010 A번

'iOS > 백준' 카테고리의 다른 글

Swift 백준 2231번) 분해합  (0) 2022.08.08
Swift 백준 10828번) 스택  (0) 2022.08.05
Swift 백준 1259번) 팰린드롬수  (0) 2022.08.05
Swift 백준 1181번) 단어 정렬  (0) 2022.08.05
Swift 백준 1085번) 직사각형에서 탈출  (0) 2022.08.05

팰린드롬수 성공다국어

한국어   
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 128 MB 29169 16895 14933 58.410%

문제

어떤 단어를 뒤에서부터 읽어도 똑같다면 그 단어를 팰린드롬이라고 한다. 'radar', 'sees'는 팰린드롬이다.

수도 팰린드롬으로 취급할 수 있다. 수의 숫자들을 뒤에서부터 읽어도 같다면 그 수는 팰린드롬수다. 121, 12421 등은 팰린드롬수다. 123, 1231은 뒤에서부터 읽으면 다르므로 팰린드롬수가 아니다. 또한 10도 팰린드롬수가 아닌데, 앞에 무의미한 0이 올 수 있다면 010이 되어 팰린드롬수로 취급할 수도 있지만, 특별히 이번 문제에서는 무의미한 0이 앞에 올 수 없다고 하자.

입력

입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 1 이상 99999 이하의 정수가 주어진다. 입력의 마지막 줄에는 0이 주어지며, 이 줄은 문제에 포함되지 않는다.

출력

각 줄마다 주어진 수가 팰린드롬수면 'yes', 아니면 'no'를 출력한다.

예제 입력 1 복사

121
1231
12421
0

예제 출력 1 복사

yes
no
yes

 

코드

import Foundation

var arr : [String] = []
var Narr = [Character]()

while true{
    arr.append(readLine()!)
    if(arr.last == "0"){
        arr.removeLast()
        break
    }
}

for i in 0..<arr.count{
    Narr = Array(arr[i])
    var len = Narr.count
    var res = 0
    for j in 0..<Narr.count{
        if j == len{
            break
        }
        if Narr[j] != Narr[len-1]{
            res = 1
            break
        }else{
            res = 0
            len = len - 1
        }
    }
    if res == 0{
        print("yes")
    }else{
        print("no")
    }
}

출처

ICPC > Regionals > South Pacific > South Pacific Region > New Zealand Programming Contest > NZPC 2006 B번

  • 문제를 번역한 사람: kks227

단어 정렬 성공

 
시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 256 MB 103526 42993 32148 40.223%

문제

알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.

  1. 길이가 짧은 것부터
  2. 길이가 같으면 사전 순으로

입력

첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

출력

조건에 따라 정렬하여 단어들을 출력한다. 단, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력한다.

예제 입력 1 복사

13
but
i
wont
hesitate
no
more
no
more
it
cannot
wait
im
yours

예제 출력 1 복사

i
im
it
no
but
more
wait
wont
yours
cannot
hesitate

 

코드

import Foundation

let input = Int(readLine()!)!
var arr : [String] = []

for _ in 0 ..< input {
    arr.append(readLine()!)
}
arr = Array(Set(arr).sorted(by: {$0<$1}).sorted(by: {$0.count<$1.count}))

for i in arr{
    print(i)
}

출처

  • 문제를 만든 사람: author5

직사각형에서 탈출 성공

 
시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 128 MB 62861 39068 34536 62.322%

문제

한수는 지금 (x, y)에 있다. 직사각형은 각 변이 좌표축에 평행하고, 왼쪽 아래 꼭짓점은 (0, 0), 오른쪽 위 꼭짓점은 (w, h)에 있다. 직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 x, y, w, h가 주어진다.

출력

첫째 줄에 문제의 정답을 출력한다.

제한

  • 1 ≤ w, h ≤ 1,000
  • 1 ≤ x ≤ w-1
  • 1 ≤ y ≤ h-1
  • x, y, w, h는 정수

예제 입력 1 복사

6 2 10 3

예제 출력 1 복사

1

 

코드

import Foundation

let input = readLine()!.split(separator: " ").map{Int(String ($0))!}

let inputX = input[0]
let inputY = input[1]
let compX = input[2]
let compY = input[3]

var resX = inputX-compX
var resY = inputY-compY


if (resX < 0){
    resX = resX * -1
}
if (resY < 0){
    resY = resY * -1
}

print(min(resX,resY,inputX,inputY))

 

출처

 

baekjoon 정보

시도했지만 맞지 못한 문제

www.acmicpc.net

 

체스판 다시 칠하기 성공

 
시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 128 MB 73535 34997 28180 47.729%

문제

지민이는 자신의 저택에서 MN개의 단위 정사각형으로 나누어져 있는 M×N 크기의 보드를 찾았다. 어떤 정사각형은 검은색으로 칠해져 있고, 나머지는 흰색으로 칠해져 있다. 지민이는 이 보드를 잘라서 8×8 크기의 체스판으로 만들려고 한다.

체스판은 검은색과 흰색이 번갈아서 칠해져 있어야 한다. 구체적으로, 각 칸이 검은색과 흰색 중 하나로 색칠되어 있고, 변을 공유하는 두 개의 사각형은 다른 색으로 칠해져 있어야 한다. 따라서 이 정의를 따르면 체스판을 색칠하는 경우는 두 가지뿐이다. 하나는 맨 왼쪽 위 칸이 흰색인 경우, 하나는 검은색인 경우이다.

보드가 체스판처럼 칠해져 있다는 보장이 없어서, 지민이는 8×8 크기의 체스판으로 잘라낸 후에 몇 개의 정사각형을 다시 칠해야겠다고 생각했다. 당연히 8*8 크기는 아무데서나 골라도 된다. 지민이가 다시 칠해야 하는 정사각형의 최소 개수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.

출력

첫째 줄에 지민이가 다시 칠해야 하는 정사각형 개수의 최솟값을 출력한다.

예제 입력 1 복사

8 8
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBBBWBW
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBWBWBW

예제 출력 1 복사

1

 

코드

import Foundation

let input = readLine()!.split(separator: " ").map{Int(String($0))!}
let row = input.first!
let col = input.last!
var arr : [[String]] = []
var res = 999

for _ in 0 ..< row {
    arr.append(readLine()!.map{String($0)})
}

let White =
[["W","B","W","B","W","B","W","B"],
["B","W","B","W","B","W","B","W"],
["W","B","W","B","W","B","W","B"],
["B","W","B","W","B","W","B","W"],
["W","B","W","B","W","B","W","B"],
["B","W","B","W","B","W","B","W"],
["W","B","W","B","W","B","W","B"],
["B","W","B","W","B","W","B","W"]]

let Black =
[["B","W","B","W","B","W","B","W"],
["W","B","W","B","W","B","W","B"],
["B","W","B","W","B","W","B","W"],
["W","B","W","B","W","B","W","B"],
["B","W","B","W","B","W","B","W"],
["W","B","W","B","W","B","W","B"],
["B","W","B","W","B","W","B","W"],
["W","B","W","B","W","B","W","B"]]

func compare(trow: Int,tcol:Int)-> Int{
    var Wcount = 0
    var Bcount = 0
    for i in 0..<8{
        for j in 0..<8{
            if White[i][j] != arr[trow + i][ tcol + j]{
                Wcount += 1
            }
            if Black[i][j] != arr[trow + i][ tcol + j]{
                Bcount += 1
            }
        }
    }
    if Wcount >= Bcount{
        return Bcount
    }else{
        return Wcount
    }
}

for i in 0...row-8{
    for j in 0...col-8{
        res = min(compare(trow: i, tcol: j),res)
    }
}

print(res)

 

 

출처

  • 문제를 번역한 사람: baekjoon
  • 데이터를 추가한 사람: jh05013
  • 문제를 다시 작성한 사람: jh05013

설탕 배달 성공다국어

한국어   
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 128 MB 237596 83287 64162 35.324%

문제

상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다.

상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다.

상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N이 주어진다. (3 ≤ N ≤ 5000)

출력

상근이가 배달하는 봉지의 최소 개수를 출력한다. 만약, 정확하게 N킬로그램을 만들 수 없다면 -1을 출력한다.

예제 입력 1 

18

예제 출력 1 

4

예제 입력 2 

4

예제 출력 2 

-1

 

 

코드

import Foundation

var input = Int(readLine()!)!
let no = -1
var a = 0
var res = 0

while (input % 5 != 0 && input>=0) {
        input = input - 3;
        a = a + 1;
}

if (input < 0) {
    print(no)
}
else {
    res += (input / 5) + a
    print(res)
}

 

 

출처

Contest > Croatian Open Competition in Informatics > COCI 2010/2011 > Contest #7 1번

나이순 정렬 성공

 
시간 제한메모리 제한제출정답맞힌 사람정답 비율
3 초 256 MB 84265 36895 28065 42.662%

문제

온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오.

입력

첫째 줄에 온라인 저지 회원의 수 N이 주어진다. (1 ≤ N ≤ 100,000)

둘째 줄부터 N개의 줄에는 각 회원의 나이와 이름이 공백으로 구분되어 주어진다. 나이는 1보다 크거나 같으며, 200보다 작거나 같은 정수이고, 이름은 알파벳 대소문자로 이루어져 있고, 길이가 100보다 작거나 같은 문자열이다. 입력은 가입한 순서로 주어진다.

출력

첫째 줄부터 총 N개의 줄에 걸쳐 온라인 저지 회원을 나이 순, 나이가 같으면 가입한 순으로 한 줄에 한 명씩 나이와 이름을 공백으로 구분해 출력한다.

예제 입력 1 

3
21 Junkyu
21 Dohyun
20 Sunyoung

예제 출력 1 

20 Sunyoung
21 Junkyu
21 Dohyun

 

코드

import Foundation

struct Member{
    var name : String
    var age : Int
    var index : Int
    
}

let num = Int(readLine()!)!
var member : [Member] = []

for i in 0 ..< num {
    let input = readLine()!.split(separator: " ").map { a in String(a) }
    let A = Member(name: input[1], age: Int(input[0])!, index: i)
    member.append(A)
}

member.sort { a, b in a.age == b.age ? a.index < b.index : a.age < b.age }

for i in 0..<num{
    print("\(member[i].age) \(member[i].name)")
}

 

최대공약수와 최소공배수 성공

 
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 128 MB 70637 41095 33377 59.028%

문제

두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다.

출력

첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.

예제 입력 1 

24 18

예제 출력 1 

6
72

 

코드

import Foundation

let input = readLine()!.split(separator: " ").map{Int($0)!}
var max = input.max()!
var min = input.min()!
var mod = 0

mod = max % min
while true{
    if mod == 0 {
        break
    }
    max = min
    min = mod
    mod = max % min
}
print(min)
print(min * (input[0]/min) * (input[1]/min))

 

후기

유클리드를 몰라 깡으로풀다 안돼서

 

https://sectumsempra.tistory.com/77

이거보고 배웠슴다...

 

 

 

 

 

 

Olympiad > 한국정보올림피아드 > 한국정보올림피아드시․도지역본선 > 지역본선 2004 > 중등부 1번

Olympiad > 한국정보올림피아드 > 한국정보올림피아드시․도지역본선 > 지역본선 2004 > 고등부 1번

+ Recent posts