//
728x90
반응형

BOJ 2744 대소문자 바꾸기

문제

영어 소문자와 대문자로 이루어진 단어를 입력받은 뒤, 대문자는 소문자로, 소문자는 대문자로 바꾸어 출력하는 프로그램을 작성하시오.

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

입력

첫째 줄에 영어 소문자와 대문자로만 이루어진 단어가 주어진다. 

단어의 길이는 최대 100이다.

출력

첫째 줄에 입력으로 주어진 단어에서 대문자는 소문자로, 소문자는 대문자로 바꾼 단어를 출력한다.

예제 입력 1

WrongAnswer

예제 출력 1

wRONGaNSWER

풀이

s = input()

print(s.swapcase())

 

728x90
반응형
728x90
반응형

BOJ 9093 단어 뒤집기

문제

문장이 주어졌을 때, 단어를 모두 뒤집어서 출력하는 프로그램을 작성하시오.

단, 단어의 순서는 바꿀 수 없다.

단어는 영어 알파벳으로만 이루어져 있다.

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

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 

각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 

단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 

단어와 단어 사이에는 공백이 하나 있다.

출력

각 테스트 케이스에 대해서, 입력으로 주어진 문장의 단어를 모두 뒤집어 출력한다.

예제 입력 1

2
I am happy today
We want to win the first prize

예제 출력 1

I ma yppah yadot
eW tnaw ot niw eht tsrif ezirp

풀이

import sys

input =  sys.stdin.readline
n = int(input())
 
for _ in range(n):
  words = input().rstrip().split()
 
  for i in words:
    print(i[::-1], end=' ')

  print()
728x90
반응형
728x90
반응형

BOJ 2902 KMP는 왜 KMP일까?

문제

KMP 알고리즘이 KMP인 이유는 이를 만든 사람의 성이 Knuth, Morris, Prett이기 때문이다.

이렇게 알고리즘에는 발견한 사람의 성을 따서 이름을 붙이는 경우가 많다.

또 다른 예로, 유명한 비대칭 암호화 알고리즘 RSA는 이를 만든 사람의 이름이 Rivest, Shamir, Adleman이다.

사람들은 이렇게 사람 성이 들어간 알고리즘을 두 가지 형태로 부른다.

첫 번째는 성을 모두 쓰고, 이를 하이픈(-)으로 이어 붙인 것이다. 예를 들면, Knuth-Morris-Pratt이다.이것을 긴 형태라고 부른다.
두 번째로 짧은 형태는 만든 사람의 성의 첫 글자만 따서 부르는 것이다. 예를 들면, KMP이다.

동혁이는 매일매일 자신이 한 일을 모두 메모장에 적어놓는다. 

잠을 자기 전에, 오늘 하루 무엇을 했는지 되새겨 보는 것으로 하루를 마감한다.

하루는 이 메모를 보던 중, 지금까지 긴 형태와 짧은 형태를 섞어서 적어 놓은 것을 발견했다.

이렇게 긴 형태로 하루 일을 기록하다가는 메모장 가격이 부담되어 파산될 것이 뻔하기 때문에, 앞으로는 짧은 형태로 기록하려고 한다.

긴 형태의 알고리즘 이름이 주어졌을 때, 이를 짧은 형태로 바꾸어 출력하는 프로그램을 작성하시오.

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

입력

입력은 한 줄로 이루어져 있고, 최대 100글자의 영어 알파벳 대문자, 소문자, 그리고 하이픈 ('-', 아스키코드 45)로만 이루어져 있다.

첫 번째 글자는 항상 대문자이다. 

그리고, 하이픈 뒤에는 반드시 대문자이다. 그 외의 모든 문자는 모두 소문자이다.

출력

첫 줄에 짧은 형태 이름을 출력한다.

예제 입력 1

Knuth-Morris-Pratt

예제 출력 1

KMP

예제 입력 2

Mirko-Slavko

예제 출력 2

MS

예제 입력 3

Pasko-Patak

예제 출력 3

PP

풀이

arr = list(input().split('-'))

for i in arr:
    print(i[0], end = '')
728x90
반응형
728x90
반응형

BOJ 10988 팰린드롬인지 확인하기

문제

알파벳 소문자로만 이루어진 단어가 주어진다. 

이때, 이 단어가 팰린드롬인지 아닌지 확인하는 프로그램을 작성하시오.

팰린드롬이란 앞으로 읽을 때와 거꾸로 읽을 때 똑같은 단어를 말한다. 

level, noon은 팰린드롬이고, baekjoon, online, judge는 팰린드롬이 아니다.

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

입력

첫째 줄에 단어가 주어진다. 

단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다.

출력

첫째 줄에 팰린드롬이면 1, 아니면 0을 출력한다.

예제 입력 1

level

예제 출력 1

1

예제 입력 2

baekjoon

예제 출력 2

0

풀이

s = input()
x = 1

for i in range(len(s)//2):
    if s[i] != s[-i-1]: 
        print(0)
        x = 0
        break

if x == 1: 
    print(x)
728x90
반응형
728x90
반응형

BOJ 1032 명령 프롬프트

문제

시작 -> 실행 -> cmd를 쳐보자. 검정 화면이 눈에 보인다. 

여기서 dir이라고 치면 그 디렉토리에 있는 서브디렉토리와 파일이 모두 나온다.

이때 원하는 파일을 찾으려면 다음과 같이 하면 된다.

dir *.exe라고 치면 확장자가 exe인 파일이 다 나온다.

"dir 패턴"과 같이 치면 그 패턴에 맞는 파일만 검색 결과로 나온다. 

예를 들어, dir a?b.exe라고 검색하면 파일명의 첫 번째 글자가 a이고, 세 번째 글자가 b이고, 확장자가 exe인 것이 모두 나온다. 

이때 두 번째 문자는 아무거나 나와도 된다. 예를 들어, acb.exe, aab.exe, apb.exe가 나온다.

이 문제는 검색 결과가 먼저 주어졌을 때, 패턴으로 뭘 쳐야 그 결과가 나오는지를 출력하는 문제이다. 

패턴에는 알파벳과 "." 그리고 "?"만 넣을 수 있다. 가능하면 ?을 적게 써야 한다.

그 디렉토리에는 검색 결과에 나온 파일만 있다고 가정하고, 파일 이름의 길이는 모두 같다.

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

입력

첫째 줄에 파일 이름의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에는 파일 이름이 주어진다. 

N은 50보다 작거나 같은 자연수이고 파일 이름의 길이는 모두 같고 길이는 최대 50이다.

파일이름은 알파벳 소문자와 '.' 로만 이루어져 있다.

출력

첫째 줄에 패턴을 출력하면 된다.

예제 입력 1

3
config.sys
config.inf
configures

예제 출력 1

config????

예제 입력 2

2
contest.txt
context.txt

예제 출력 2

conte?t.txt

예제 입력 3

3
c.user.mike.programs
c.user.nike.programs
c.user.rice.programs

예제 출력 3

c.user.?i?e.programs

예제 입력 4

4
a
a
b
b

예제 출력 4

onlyonefile

풀이

n = int(input())
arr = list(input())
l = len(arr)

for i in range(n - 1):
    other = list(input())
    for j in range(l):
        if arr[j] != other[j]:
            arr[j] = '?'
            
print(''.join(arr))
728x90
반응형
728x90
반응형

BOJ 1100 하얀 칸

문제

체스판은 8×8크기이고, 검정 칸과 하얀 칸이 번갈아가면서 색칠되어 있다. 

가장 왼쪽 위칸 (0,0)은 하얀색이다. 

체스판의 상태가 주어졌을 때, 하얀 칸 위에 말이 몇 개 있는지 출력하는 프로그램을 작성하시오.

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

입력

첫째 줄부터 8개의 줄에 체스판의 상태가 주어진다.

‘.’은 빈 칸이고, ‘F’는 위에 말이 있는 칸이다.

출력

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

예제 입력 1

.F.F...F
F...F.F.
...F.F.F
F.F...F.
.F...F..
F...F.F.
.F.F.F.F
..FF..F.

예제 출력 1

1

예제 입력 2

........
........
........
........
........
........
........
........

예제 출력 2

0

예제 입력 3

........
..F.....
.....F..
.....F..
........
........
.......F
.F......

예제 출력 3

32

예제 입력 4

........
..F.....
.....F..
.....F..
........
........
.......F
.F......

예제 출력 4

2

풀이

import sys

input = sys.stdin.readline
board = []

for i in range(8):
  board.append(list(map(str, input())))

res = 0

for i in range(8):
  for j in range(8):
    if (i+j)%2 == 0:
      if board[i][j] == 'F':
        res += 1

print(res)

 

728x90
반응형
728x90
반응형

BOJ 1259 팰린드롬수

문제

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

'radar', 'sees'는 팰린드롬이다.

수도 팰린드롬으로 취급할 수 있다. 

수의 숫자들을 뒤에서부터 읽어도 같다면 그 수는 팰린드롬수다.

121, 12421 등은 팰린드롬수다. 123, 1231은 뒤에서부터 읽으면 다르므로 팰린드롬수가 아니다.

또한 10도 팰린드롬수가 아닌데, 앞에 무의미한 0이 올 수 있다면 010이 되어 팰린드롬수로 취급할 수도 있지만,

특별히 이번 문제에서는 무의미한 0이 앞에 올 수 없다고 하자.

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

입력

입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 1 이상 99999 이하의 정수가 주어진다.

입력의 마지막 줄에는 0이 주어지며, 이 줄은 문제에 포함되지 않는다.

출력

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

예제 입력 1

121
1231
12421
0

예제 출력 1

yes
no
yes

풀이

import sys

while True:
    input = sys.stdin.readline
    s = input().rstrip()

    if s == s[::-1] and s != '0':
        print('yes')
    elif s == '0':
        sys.exit()
    else:
        print('no')
728x90
반응형
728x90
반응형

BOJ 10808 알파벳 개수

문제

알파벳 소문자로만 이루어진 단어 S가 주어진다.

각 알파벳이 단어에 몇 개가 포함되어 있는지 구하는 프로그램을 작성하시오.

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

입력

첫째 줄에 단어 S가 주어진다.

단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.

출력

단어에 포함되어 있는 a의 개수, b의 개수, …, z의 개수를 공백으로 구분해서 출력한다.

예제 입력 1

baekjoon

예제 출력 1

1 1 0 0 1 0 0 0 0 1 1 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0

풀이

s = str(input()) 
alphabet = {chr(x):0 for x in range(97, 123)}

for i in s:
    if i in alphabet:
        alphabet[i] = alphabet[i] +1

for j in alphabet:
    print(alphabet[j], end=' ')
728x90
반응형

+ Recent posts