팰린드롬수 성공다국어

한국어   
시간 제한메모리 제한제출정답맞힌 사람정답 비율
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번

소수 찾기 성공

 
시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 128 MB 127595 59856 48151 46.964%

문제

주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.

입력

첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.

출력

주어진 수들 중 소수의 개수를 출력한다.

예제 입력 1 

4
1 3 5 7

예제 출력 1 

3

 

코드

import Foundation

let input = Int(readLine()!)!
var arr = readLine()!.split(separator: " ").map{ Int($0)! }
var prime = true
var num = 0

for i in 0 ..< arr.count{
    if arr[i] == 1 {
        prime = false
    }else{
        for j in 2..<arr[i]{
                if(arr[i] % j == 0){
                    prime = false
                }
        }
    }
    if prime == true{
        num += 1
    }
    prime = true
}
print(num)

num을 사용하지 않고 소수인 수를 찾아 새로운 배열에 추가하여 그 배열의 크기를 출력 하려 하였지만 for문에 range오류해결을 하지 못하였다,,,,끄응,,,

 

도움이 된 코드

https://sapjilkingios.tistory.com/40

출처

문제를 만든 사람: baekjoon

 

baekjoon 정보

시도했지만 맞지 못한 문제

www.acmicpc.net

 

문제

요세푸스 문제는 다음과 같다.

1번부터 N번까지 N명의 사람이 원을 이루면서 앉아있고, 양의 정수 K(≤ N)가 주어진다. 이제 순서대로 K번째 사람을 제거한다. 한 사람이 제거되면 남은 사람들로 이루어진 원을 따라 이 과정을 계속해 나간다. 이 과정은 N명의 사람이 모두 제거될 때까지 계속된다. 원에서 사람들이 제거되는 순서를 (N, K)-요세푸스 순열이라고 한다. 예를 들어 (7, 3)-요세푸스 순열은 <3, 6, 2, 7, 5, 1, 4>이다.

N과 K가 주어지면 (N, K)-요세푸스 순열을 구하는 프로그램을 작성하시오.

 

입력

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)

 

출력

예제와 같이 요세푸스 순열을 출력한다

코드

import Foundation

let input = readLine()!.split(separator: " ").map{Int(String($0))!}
let N = input.first!
var K = input.last!

var arr = Array(1...N) //N까지의 배열
var resArr = [Int]() //제거된 사람의 배열
var cnt = K //제거할 자리값

while !arr.isEmpty {
    if cnt <= arr.count{ //자리값은 배열의 크기보다 작거나 같아야한다.
        resArr.append(arr[cnt-1]) //제거된 사람의 배열에 넣기
        arr.remove(at: cnt-1)
        cnt = cnt+K-1 //제거할 자리는 K만큼 증가
    }else{
        cnt -= arr.count
    }
}

print("<" + resArr.map({String($0)}).joined(separator: ", ") + ">")

 

 

출처

문제를 만든 사람: baekjoon

 

baekjoon 정보

시도했지만 맞지 못한 문제

www.acmicpc.net

 

 

 

+ Recent posts