백준 - 단계별 문제풀기(4673번, 10809번, 1157번, 1152번, 2908번, 5622번, 2941번, 10828번, 18258번, )

유다송·2022년 8월 29일
0

4673번

numbers = list(range(1,10_001))
remove_list=[]    #생성자 리스트
for num in numbers:
    for n in str(num):
        num += int(n)
    if num <= 10_000:
        remove_list.append(num)
for remove_num in set(remove_list):
    numbers.remove(remove_num)
for self_num in numbers:
    print(self_num)
  • for문으로 numbers 안의 숫자들을 num으로 지정해주고 for문을 다시 사용해서 num을 str이라고 반환.
  • str(num)을 범위로 n을 지정해준다.
  • str로 변환한 이유는 생성자를 구하려면 각 자리수 분산이 가능해야하는데 int에서는 불가능하기 때문.
  • 33 = 33 + 3 + 3 => 39, 39는 생성자였던 것 처럼 num += int(n)으로 생성자를 구함.
  • 생성자가 10000보다 작으면 append함수를 사용해 생성자 리스트인 remove list에 올린다.
  • remove_list에는 중복된 숫자가 많아 set 함수를 이용해 중복된 숫자를 정리하고 이것을 범위로 하는 remove_num을 만들어 맨 처음에 생성했던 리스트 numbers에는 remove_num을 제거한다.
  • numbers를 범위로 최종 구하는 값인 self_num을 지칭해주고 출력해준다.

10809번

s = input()
abc = 'abcdefghijklmnopqrstuvwxyz'

for i in abc:
    if i in s:
        print(s.index(i), end=" ")
    else:
        print(-1, end=" ")
  • 알파벳의 각 요소가 S에 존재하면 그때 s에서의 위치를 반환하기 위해 index 사용.

1157번

word = input().upper()
word_list = list(set(word))

cnt = []
for i in word_list:
    cnt.append(word.count(i))
    
if cnt.count(max(cnt)) > 1:
    print("?")
else:
    print(word_list[(cnt.index(max(cnt)))])

1152번

word = input().split()
print(len(word))

2908번

num1, num2 = input().split()
num1 = int(num1[::-1])
num2 = int(num2[::-1])

if num1 > num2:
    print(num1)
else:
    print(num2)

5622번

alp = input().upper()
num = ['ABC','DEF','GHI','JKL','MNO','PQRS','TUV','WXYZ']
time = 0

for i in range(len(alp)): 
    for j in range(len(num)):
        if(alp[i] in num[j]) == True:
            time += j+3
print(time)
  
  • 일단 입력받은 문자들을 전부 대문자로 바꾸어 주고, 각각의 번호에 맞는 알파벳을 리스트로 저장해준다.
  • alp의 길이만큼 for문을 돌려주고 그 안에서 num의 길이만큼 for문을 또 돌려준다.
  • 만약 alp[i]가 num[j]와 같은 수라면 time에 j(즉, j번째 숫자)를 더해주고 3을 더한다.

2941번

list = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']
alp = input()

for i in list:
    alp = alp.replace(i, "*")
print(len(alp))
  • 크로아티아 알파벳을 리스트로 만든다.
  • alp에 list안에 있는 알파벳을 찾아서 *로 바꾼다.

10828번

import sys
n = int(sys.stdin.readline())
stack = []

for i in range(n):
    word = sys.stdin.readline().split()
    order = word[0]
    
    if order == "push":
        value = word[1]
        stack.append(value)
    elif order == "pop":
        if len(stack) == 0:
            print(-1)
        else:
            print(stack.pop())
    elif order == "size":
        print(len(stack))
    elif order == "empty":
        if len(stack) == 0:
            print(1)
        else:
            print(0)
    elif order == "top":
        if len(stack) == 0:
            print(-1)
        else:
            print(stack[-1])
        
import sys
input = sys.stdin.readline
 
n = int(input())
stack = []

def push(x):
    stack.append(x)

def pop():
    if not stack:
        return -1
    return stack.pop()

def size():
    return len(stack)

def empty():
    if not stack:
        return 1
    return 0

def top():
    if not stack:
        return -1
    return stack[-1]

for i in range(n):
    command = input().split()
    if "push" in command:
        push(command[1])
    elif "top" in command:
        print(top())
    elif "size" in command:
        print(size())
    elif "empty" in command:
        print(empty())
    else:
        print(pop())
  • python은 따로 스택을 지원하지 않는다. 그렇기 때문에 list를 사용해서 구현 가능.
  • input() 함수를 사용할 경우, 시간초과 에러가 뜨므로 시간단축을 위해 sys.stdin.readline()을 사용한다.

18258번

from collections import deque
import sys
input = sys.stdin.readline
 
n = int(input())
stack = deque([])
 
def push(x):
    stack.append(x)
 
def pop():
    if not stack:
        return -1
    return stack.popleft()
 
def size():
    return len(stack)
 
def empty():
    if not stack:
        return 1
    return 0
 
def front():
    if not stack:
        return -1
    return stack[0]
 
def back():
    if not stack:
        return -1
    return stack[-1]
 
for _ in range(n):
    command = input().split()
    if 'push' in command:
        push(command[1])
    elif 'front' in command:
        print(front())
    elif 'back' in command:
        print(back())
    elif 'size' in command:
        print(size())
    elif 'empty' in command:
        print(empty())
    else:
        print(pop())
  • 제일 앞에 있는 값을 빼낼 때에는 deque를 사용하여 실행시간을 단축.

0개의 댓글