백준

 

브론즈

8958번 OX퀴즈

문제 설명

Python

import sys

N = int(input())
for i in range(0, N):
    S = input()
    if (len(S) >= 80):
        print("길이는 80 미만이어야 합니다.")
        sys.exit()
    score = 0
    result = 0

    for i in S:
        if (i == "O"):
            score += 1
            result += score
        elif (i == "X"):
            score = 0
        else:
            print("O나 X만 입력할 수 있습니다.")
            sys.exit()
    print(result)

1152번 단어의 개수

문제 설명

Python

import sys

S = input()
if len(S) > 1000000:
    print("문자열의 길이는 1,000,000 이하여야 합니다.")
    sys.exit()

flag = -1
count = 0
for i in S:
    if (flag == -1 or flag == 0) & i.isalpha():
        flag = 1
        count += 1
    elif i == " ":
        flag = 0
    elif not(i.isalpha() or i == " "):
        print("공백 문자나 영어 대소문자만 입력할 수 있습니다.")
        sys.exit()
print(count)

새로운 정보

  •   대신 or을 사용한다.
  • else if 대신 elif를 사용한다.
  • if나 else if에서 사용하던 괄호를 생략한다.

10809번 알파벳 찾기

문제 설명

Python

import string
import sys

S = input()
if (len(S) > 100):
    print("단어의 길이는 100자까지만 가능합니다")
    sys.exit()

for i in S:
    if (not(i.islower())):
        print("소문자 영어만 입력 가능합니다.")
        sys.exit()

for i in string.ascii_lowercase:
    count = -1
    result = -1
    for j in S:
        count += 1
        if (i == j):
            result = count
            break
    print(result, end=" ")  

새로운 정보

  • 문자를 다루는 메소드들의 종류가 많다.
  • !() 대신 not()을 사용한다.
  • return 대신 sys.exit()를 사용한다.
  • .length 대신 len()을 사용한다.

2675번 문자열 반복

문제 설명

Python

# 201106 금요일

import sys
T = int(input())

if (T < 1) or (T > 1000):
    print("테스트 케이스의 개수는 1 이상 1000 이하여야 합니다.")
    sys.exit()

for i in range(0, T):
    R, S = input().split(" ")

    if (len(R) < 1) or (len(R) > 8):
        print("반복 횟수는 1 이상 8 이하여야 합니다.")
        sys.exit()
    elif (len(S) < 1) or (len(S) > 20):
        print("문자열의 길이는 1 이상 20 이하여야 합니다.")
        sys.exit()

    for j in S:
        for k in range(0, int(R)):
            print(j, end="")
    print("")

1157번 단어 공부

문제 설명

Python

import string
import sys

S = input().upper()

if len(S) > 1000000:
    print("입력값의 길이는 1,000,000자 이하여야 합니다.")
    sys.exit()

count1 = count2 = 0
alpha1 = alpha2 = ""

for i in string.ascii_uppercase:
    temp_count = 0
    for j in S:
        if j == i:
            temp_count += 1
    if count1 < temp_count:
        count1 = temp_count
        alpha1 = i
    elif count2 < temp_count:
        count2 = temp_count
        alpha2 = i
if count1 == count2:
    print("?")
else:
    print(alpha1)

새로운 정보

  • if, elif는 뒤에 () 없이 사용한다.
  • 여러 변수를 동시에 초기화 할 때는 a, b = 0이 아니라 a = b = 0이라고 작성한다.
  • 대문자로 문자 변환할 때는 .upper()를 사용한다.
  • string.ascii_uppercase는 A부터 Z까지이다.

2908번 상수

문제 설명

Python

# 201106 금요일

import sys
A, B = input().split(" ")

if (A == 0) or (B == 0) or (A == B) or (int(A) < 100) or (int(B) < 100) or (int(A) > 999) or (int(B) > 999):
    print("두 수의 조건이 맞는지 확인해주세요.")
    sys.exit()

number1 = number2 = 0
count = 1

for i in range(0, 3):
    number1 += int(A[i]) * count
    number2 += int(B[i]) * count
    count *= 10

if number1 > number2:
    print(number1)
elif number1 < number2:
    print(number2)

새로운 정보

  • 혹시나 했지만 역시, A or B == 0라고 사용할 수 없다.

5622번 다이얼

문제 설명

Python

# 201106 금요일

import sys

alpha = input()
time = 0

if len(alpha) < 2 or len(alpha) > 15:
    print("단어는 2글자 이상 15글자 이하로 입력해주세요.")
    sys.exit()
elif not alpha.isupper():
    print("단어는 영어 대문자만 입력 가능합니다.")
    sys.exit()


def is_which_number(s):
    if s == "A" or s == "B" or s == "C":
        return 2
    elif s == "D" or s == "E" or s == "F":
        return 3
    elif s == "G" or s == "H" or s == "I":
        return 4
    elif s == "J" or s == "K" or s == "L":
        return 5
    elif s == "M" or s == "N" or s == "O":
        return 6
    elif s == "P" or s == "Q" or s == "R" or s == "S":
        return 7
    elif s == "T" or s == "U" or s == "V":
        return 8
    else:
        return 9


for i in alpha:
    time += is_which_number(i) + 1
print(time)

새로운 정보

  • 함수를 만들면 앞뒤로 두 줄씩 띄어야 한다.

설명

알파벳이 주어지면 해당 알파벳에 맞는 숫자를 출력하는 함수에서 애초에 숫자 1을 더해서 걸리는 시간을 출력할 수도 있다.
하지만 문제의 조건이 바뀔 때를 고려하여 수정이 쉽도록 시간을 계산하는 부분을 따로 뺐다.
물론 문제가 바뀌지는 않겠지만.

11721번 열 개씩 끊어 출력하기

문제 설명

Python

import sys

N = input()
if (len(N) == 0) or (len(N) > 100):
    print("단어의 길이는 0 이상 100 이하여야 합니다.")
    sys.exit()
elif not(N.isalpha()):
    print("단어는 알파벳 소문자와 대문자로만 이루어져야 합니다.")
    sys.exit()

for i in range(0, len(N)):
    if (i != 0) & (i % 10 == 0):
        print("")
    print(N[i], end="")

11719번 그대로 출력하기 2

문제 설명

Python

while True:
    try:
        N = input()
        print(N)
    except EOFError:
        break

새로운 정보

  • 백준 사이트에서 런타임 에러는 에러 메시지를 알려주지 않는다.
    그 이유는 과거에 try catch문을 이용해 채점 데이터를 에러 메시지로 출력하는 사람들이 있었기 때문이라고 한다.
  • 에러를 처리할 때는 try-catch가 아니라 try-except를 사용해야 한다.
  • EOFError는 읽어들일 데이터가 없을 때 발생하는 에러이다.

1924번 2007년

문제 설명

Python

x, y = input().split(" ")
day = 0
for i in range(1, int(x)+1):
    if i == int(x):
        day = day + int(y)
    else:
        if i == 2:
            day = day + 28
        elif i == 4 or i == 6 or i == 9 or i == 11:
            day = day + 30
        else:
            day = day + 31
result = int(day % 7)
if result == 0:
    print("SUN")
elif result == 1:
    print("MON")
elif result == 2:
    print("TUE")
elif result == 3:
    print("WED")
elif result == 4:
    print("THU")
elif result == 5:
    print("FRI")
elif result == 6:
    print("SAT")

새로운 정보

  • 한 달의 일수, 월요일부터 일요일까지의 단어를 각각 배열로 선언 후 사용할 수 있다.
    숫자를 문자로 바꾸는 if문의 조건에 따라 출력되는 내용은 다르지만, 형식은 같아서 너무 쓸데없이 반복되는 느낌이 있었다.
    그렇지만 파이썬에서 배열을 사용해본 적이 없어서 우선 할 수 있는 방법대로 구현했다.
    다른 사람들이 푼 문제를 보니 각각 배열에 넣어서 간단한 코드로 구현할 수 있었다! 앞으로는 배열도 적절하게 사용해보자.
  • 파이썬에서는 +=를 못쓰는 줄 알았는데 사용 가능하다.