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를 사용하여 실행시간을 단축.