728x90

BOJ 12605 단어순서 뒤집기

문제

스페이스로 띄어쓰기 된 단어들의 리스트가 주어질때, 단어들을 반대 순서로 뒤집어라.

각 라인은 w개의 영단어로 이루어져 있으며, 총 L개의 알파벳을 가진다. 

각 행은 알파벳과 스페이스로만 이루어져 있다. 

단어 사이에는 하나의 스페이스만 들어간다.

시간 제한 : 5 초
메모리 제한 : 512 MB

입력

첫 행은 N이며, 전체 케이스의 개수이다.

N개의 케이스들이 이어지는데, 각 케이스는 스페이스로 띄어진 단어들이다. 

스페이스는 라인의 처음과 끝에는 나타나지 않는다. N과 L은 다음 범위를 가진다.

N = 5
1 ≤ L ≤ 25

출력

각 케이스에 대해서, 케이스 번호가 x일때  "Case #x: " 를 출력한 후 그 후에 이어서 단어들을 반대 순서로 출력한다.

예제 입력 1

3
this is a test
foobar
all your base

예제 출력 1

Case #1: test a is this
Case #2: foobar
Case #3: base your all

풀이

# boj 12605 단어순서 뒤집기
import sys

input = sys.stdin.readline
n = int(input())

for i in range(1, n+1):
    words = list(input().rstrip().split())
    print('Case #%d: %s' %(i, ' '.join(words[::-1])))
728x90
728x90

BOJ 11816 8진수, 10진수, 16진수

문제

정수 X가 주어진다. 정수 X는 항상 8진수, 10진수, 16진수 중에 하나이다.

8진수인 경우에는 수의 앞에 0이 주어지고, 16진수인 경우에는 0x가 주어진다.

X를 10진수로 바꿔서 출력하는 프로그램을 작성하시오.

시간 제한 : 1 초
메모리 제한 : 256 MB

입력

첫째 줄에 X가 주어진다. 

X는 10진수로 바꿨을 때, 1,000,000보다 작거나 같은 자연수이다. 

16진수인 경우 알파벳은 소문자로만 이루어져 있다.

출력

첫째 줄에 입력받은 X를 10진수로 바꿔서 출력한다.

예제 입력 1

10

예제 출력 1

10

예제 입력 2

010

예제 출력 2

8

예제 입력 3

0x10

예제 출력 3

16

예제 입력 4

0x3f6

예제 출력 4

1014

풀이

# boj 11816 8진수, 10진수, 16진수
x = input()

if x[0] == '0':
    if x[1] == 'x':
        print(int(x, 16))
    else:
        print(int(x, 8))
else:
    print(x)
728x90
728x90

BOJ 25372 성택이의 은밀한 비밀번호

문제

부산사이버대학교 학생 성택이는 엄마의 의뢰를 받아 주어진 문자열이 현관문 비밀번호에 사용 가능한지 알아내야 한다. 

성택이는 공부해야 하므로 우리가 도와주자!

사용할 수 있는 비밀번호의 규칙은 다음과 같다.

1. 비밀번호는 6자리 이상 9자리 이하여야 한다.

예를 들어, 123124는 올바른 비밀번호이고, 1202727161은 잘못된 비밀번호이다. 

문자열이 주어졌을 때 현관문 비밀번호로 사용할 수 있는지 판단하자.

시간 제한 : 1 초
메모리 제한 : 1024 MB

입력

첫째 줄에 문자열의 총개수 N이 주어진다.

둘째 줄부터 N개의 줄에 걸쳐 숫자, 영어 대소문자로만 구성된 문자열이 주어진다.

출력

줄마다 사용할 수 있는 비밀번호면 yes, 그렇지 않으면 no를 출력한다.

제한

예제 입력 1

3
1245125
asdij
120318739721

예제 출력 1

yes
no
no

풀이

# boj 25372 성택이의 은밀한 비밀번호
import sys

input = sys.stdin.readline
n = int(input())

for i in range(n) :
    s = input().strip()
    if (len(s) <= 9) & (len(s) >= 6) :
        print("yes")
    else :
        print("no")
728x90
728x90

BOJ 3059 등장하지 않는 문자의 합

문제

알파벳 대문자로 구성되어있는 문자열 S가 주어졌을 때, 

S에 등장하지 않는 알파벳 대문자의 아스키 코드 값의 합을 구하는 프로그램을 작성하시오.

문자열 S가 “ABCDEFGHIJKLMNOPQRSTUVW” 일 때, S에 등장하지 않는 알파벳 대문자는 X, Y, Z이다.

X의 아스키 코드 값은 88, Y는 89, Z는 90이므로 이 아스키 코드 값의 합은 267이다.

알파벳 대문자의 아스키 코드 값은 다음과 같다.

시간 제한 : 1 초
메모리 제한 : 128 MB
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90

입력

입력은 T개의 테스트 데이터로 구성된다. 

입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다.

각 테스트 데이터는 한 줄로 구성되어 있고, 문자열 S가 주어진다.

S는 알파벳 대문자로만 구성되어 있고, 최대 1000글자이다.

출력

각 테스트 데이터에 대해, 

입력으로 주어진 문자열 S에 등장하지 않는 알파벳 대문자의 아스키 코드 값의 합을 한 줄에 하나씩 출력한다.

예제 입력 1

2
ABCDEFGHIJKLMNOPQRSTUVW
A

예제 출력 1

267
1950

풀이

# boj 3059 등장하지 않는 문자의 합
t = int(input())

for _ in range(t):
    l = [i for i in range(65, 91)]
    for i in input():
        l[ord(i)-65] = 0
    print(sum(l))
728x90
728x90

BOJ 14490 백대열

문제

대열이는 욱제의 친구다.

“야 백대열을 약분하면 뭔지 알아?”
“??”
“십대일이야~ 하하!”

n:m이 주어진다. 욱제를 도와주자. (...)

시간 제한 : 2 초 
메모리 제한 : 512 MB

입력

n과 m이 :을 사이에 두고 주어진다. (1 ≤ n, m ≤ 100,000,000)

출력

두 수를 최대한으로 약분하여 출력한다.

예제 입력 1

100:10

예제 출력 1

10:1

예제 입력 2

18:24

예제 출력 2

3:4

풀이

# boj 14490 백대열
def gcd(a, b):
    if b == 0:
        return a
    return gcd(b, a%b)

a, b = map(int, input().split(':'))
t = gcd(max(a, b), min(a, b))

print(f"{a//t}:{b//t}")
728x90
728x90

BOJ 11283 한글 2

문제

한글의 각 글자는 초성, 중성, 종성으로 이루어져 있고, 이 세 가지를 모아써서 한 글자를 나타낸다.

초성은 ㄱ, ㄲ, ㄴ, ㄷ, ㄸ, ㄹ, ㅁ, ㅂ, ㅃ, ㅅ, ㅆ, ㅇ, ㅈ, ㅉ, ㅊ, ㅋ, ㅌ, ㅍ, ㅎ로 총 19개가 있고, 

중성은 ㅏ, ㅐ, ㅑ, ㅒ, ㅓ, ㅔ, ㅕ ㅖ, ㅗ, ㅘ, ㅙ, ㅚ, ㅛ, ㅜ, ㅝ, ㅞ, ㅟ, ㅠ, ㅡ, ㅢ, ㅣ로 총 21개, 

종성은 없음, ㄱ, ㄲ, ㄳ, ㄴ, ㄵ, ㄶ, ㄷ, ㄹ, ㄺ, ㄻ, ㄼ, ㄽ, ㄾ, ㄿ, ㅀ, ㅁ, ㅂ, ㅄ, ㅅ, ㅆ, ㅇ, ㅈ, ㅊ, ㅋ, ㅌ, ㅍ, ㅎ로 총 28개가 있다.

첫 번째 글자는 초성에서 ㄱ, 중성에서 ㅏ, 종성에서 없음을 합친 "가"가 되고, 

두 번째 글자는 초성에서 ㄱ, 중성에서 ㅏ, 종성에서 ㄱ을 합친 "각"이 된다. 

마지막 글자는 초성에서 ㅎ, 중성에서 ㅣ, 종성에서 ㅎ를 합친 "힣"이 된다.

초성과 중성, 그리고 종성을 합쳐서 만들 수 있는 글자의 개수는 총 19*21*28 = 11,172개가 된다.

한글이 주어졌을 때, 몇 번째 글자인지 구하는 프로그램을 작성하시오.

시간 제한 : 1 초
메모리 제한 : 256 MB

입력

첫째 줄에 글자 하나가 주어진다. 

주어지는 글자는 UTF-8로 인코딩 되어 있는 한글이며, 문제 설명에 나온 방법으로 만들 수 있다.

출력

입력으로 주어진 글자가 몇 번째인지 출력한다.

예제 입력 1

예제 출력 1

1

예제 입력 2

예제 출력 2

11172

예제 입력 3

예제 출력 3

4146

예제 입력 4

예제 출력 4

7425

풀이

# boj 11283 한글 2
s = input()

print(ord(s) - 44031)
728x90
728x90

BOJ 5524 입실 관리

문제

JOI회사에서는 방에 들어가기 위해 입실 기록을 입력할 때 알파벳으로 이름을 입력한다. 

그런데, 컴퓨터에 오류가 나서 대문자 소문자가 섞여버려 입실 기록이 읽기 힘들어졌다.

JOI회사의 입실 기록을 읽기 쉽게 하기 위해서 기록된 이름을 모두 소문자로 변환하는 프로그램을 작성하라. 

단, 입실 기록에는 같은 이름의 사람이 생기기도 한다.

시간 제한 : 1 초
메모리 제한 : 256 MB

입력

첫째 줄에는 정수 N(1 ≤ N ≤ 100)이 주어진다. 

둘째 줄부터는 1글자 이상 20문자 이하의 영어 대문자, 소문자로만 이루어지는 문자열 Si가 주어진다.

출력

i번째 줄에, i번째 입실자의 이름을 소문자로 출력한다.

서브태스크

번호 배점 제한
1 60 N ≤ 10.
2 40 추가적인 제약 조건이 없다.

예제 입력 1

3
WatanabE
ITO
YamaMoto

예제 출력 1

watanabe
ito
yamamoto

예제 입력 2

4
SUZUKI
tanaka
tAkAhAshi
SuZuKi

예제 출력 2

suzuki
tanaka
takahashi
suzuki

풀이

# boj 5524 입실 관리
n = int(input()) 

for _ in range(n): 
  res = input().lower() 
  print(res)

 

728x90
728x90

BOJ 5586 JOI와 IOI

문제

입력으로 주어지는 문자열에서 연속으로 3개의 문자가 JOI 또는 IOI인 곳이 각각 몇 개 있는지 구하는 프로그램을 작성하시오. 

문자열은 알파벳 대문자로만 이루어져 있다. 

예를 들어, 아래와 같이 "JOIOIOI"에는 JOI가 1개, IOI가 2개 있다.

시간 제한 : 1 초
메모리 제한 : 128 MB

입력

첫째 줄에 알파벳 10000자 이내의 문자열이 주어진다.

출력

첫째 줄에 문자열에 포함되어 있는 JOI의 개수, 둘째 줄에 IOI의 개수를 출력한다.

예제 입력 1

JOIJOI

예제 출력 1

2
0

예제 입력 2

JOIOIOIOI

예제 출력 2

1
3

예제 입력 3

JOIOIJOINXNXJIOIOIOJ

예제 출력 3

2
3

풀이

# boj 5586 JOI와 IOI
s = input()
JOI = 0
IOI = 0

for i in range(len(s)-2):
    res = ''
    res += s[i] + s[i+1] + s[i+2] 
    
    if res == 'JOI':
        JOI += 1
    if res == 'IOI':
        IOI += 1
        
print(JOI)
print(IOI)
728x90

+ Recent posts