빠빠빠빠빠빠 뿌뿌뿌 빠빠빠 뿌뿌뿌 빠빠빠빠빠빠 뿌뿌뿌 빠빠빠 뿌뿌뿌 빠빠빠빠빠빠 뿌뿌뿌 빠빠빠 뿌뿌뿌
https://www.acmicpc.net/problem/10773
import sys
k = int(sys.stdin.readline())
moneys = []
for i in range(k):
nums = int(sys.stdin.readline())
if nums == 0:
moneys.pop()
else:
moneys.append(nums)
print(sum(moneys))
> 정수가 0일 경우 가장 최근에 쓴 수를 지우고(pop) 아닐 경우 해당 수를 쓴다. 포인트는 정수가 "0"일 경우 지울 수 있는 수가 있음이 보장된다는 것. 최종적으로 적어낸 수의 합은 sum으로 구한다.
> pop은 마지막 원소를 빼(삭제해)주며, append는 마지막 자리에 원소를 써준다.
> stack의 개념을 모르더라도 풀 수 있는 문제. 포인트는 뒤에서부터 넣고 뒤에서 빼는것!
https://www.acmicpc.net/problem/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":
stack.append(word[1])
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])
정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램 작성. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
> 주어진 명령이 많아서(push, pop, size, empty, top) 코드가 길 뿐 스택 기본 개념만 알면 충분히 풀 수 있는 문제. 물론 헷갈려서 구글링을 좀 하긴 했지만 이해에 큰 무리는 없었다!
https://www.acmicpc.net/problem/9012
import sys
t = int(sys.stdin.readline())
for i in range(t):
strng = sys.stdin.readline().strip()
s = list(strng)
temp = 0
for i in s:
if i == '(':
temp += 1
elif i == ')':
temp -= 1
if temp < 0:
print("NO")
break
if temp > 0:
print("NO")
elif temp == 0:
print("YES")
입력으로 주어진 괄호 문자열이 VPS 인지 아닌지를 판단해서 그 결과를 YES 와 NO 로 나타내어야 한다.
> 처음에 count('(')와 count(')')를 사용해 풀었다. 이 경우 ())(()같은 걸 yes라 판단하게 되므로.. 다른 방식으로 생각(+1과 -1이라 생각)하는 게 필요했다. 아이디어를 떠올리지 못해 결국 구글링했다ㅠㅠ
> vps특징상 (다음엔 )가 반드시 와야 할 것이다. 이를 활용해 (를 +1, )를 -1로 두고 그 합을 계산해준다!
> 나도 이런거 한번에 떠올릴 수 있는 사람이 되고싶다.. 쩝
> 다음에 다시 풀어보자!!
스택 개념은 다음의 블로그를 참조하였습니다.
https://gorokke.tistory.com/129
https://mong9data.tistory.com/35
https://www.acmicpc.net/problem/1259
import sys
while True:
a = sys.stdin.readline().strip()
b = a[::-1]
if a == '0':
break
elif a == b:
print("yes")
elif a != b:
print("no")
어떤 단어를 뒤에서부터 읽어도 똑같다면 그 단어를 팰린드롬이라고 한다. 수도 팰린드롬으로 취급할 수 있다. 주어진 수가 팰린드롬수면 'yes', 아니면 'no' 출력.
> 출력초과가 뜨길래 으잉? 했다. 코드를 뜯어보니 if a=='0'을 if a==0이라고 둬서 0을 쳐도 break가 되지 않았다는 걸 깨달았다.. ㅋㅋㅋㅋ아이 부끄러ㅋㅋ
> 팰린드롬은 풀때마다 헷갈리는 것 같다. 문제를 접하면 거의 자동반사적으로 for문을 써서 i번째 인덱스와 -i-1번째 인덱스 값을 비교하려함.. 그럴 필요 없이 그냥 뒤집어서 같은지 다른지만 보면 되는데 말이다.
https://www.acmicpc.net/problem/1085
import sys
x, y, w, h = map(int, sys.stdin.readline().split())
print(min(x-0, y-0, w-x, h-y))
직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램 작성
> 진짜 어이없는 문제.. 예제 하나가 1, 1, 5, 5인데 출력값이 1이라길래 ????하다 알아냄..아 원점(0,0)도 경계선으로 쳐주는 거구나..ㅋ..ㅋㅋ... 그래서 x-0, y-0도 같이 min에다 다 써주면 끝이다..ㅎ
https://www.acmicpc.net/problem/15829
import sys
l = int(sys.stdin.readline())
strng = sys.stdin.readline().strip()
ans = 0
for i in range(l):
ans += (ord(strng[i])-96) * (31**i)
print(ans % 1234567891)
해시 함수란 임의의 길이의 입력을 받아서 고정된 길이의 출력을 내보내는 함수. 대표적으로 자료의 저장과 탐색에 쓰임.
> 식은 알겠는데 어떻게 문자열을 숫자로 변경할 지에 대해 정보가 없어 그냥 구글링했다. 아스키코드로 변환하는 함수를 사용하더라. 역시..ㅋ 이런건 구글링 하는게 맞다..
> 그냥 해시함수라는 게 있구나 하고 배워간다!
https://www.acmicpc.net/problem/4153
import sys
while True:
lst = list(map(int, sys.stdin.readline().split()))
lst.sort()
if sum(lst) ==0:
break
if (lst[0]**2) + (lst[1]**2) == (lst[2]**2):
print("right")
else:
print("wrong")
주어진 세변의 길이로 삼각형이 직각인지 아닌지 구분
> 피타고라스? 껌이지~ 하면서 a, b, c로 놓고 풀었는데 '틀렸습니다'가 떴다. ...어?
> 친구한테 물어보니 a, b, c사이에 c가 가장 큰 값이라는 가정이 없는 것 같다고 해서.. sort를 쓰기위해 리스트로 바꿔보니 바로 맞았다!! 이거였구나ㅠㅠ 문제 꼼꼼히 읽는 습관을 들여야겠다!
https://www.acmicpc.net/problem/1436
import sys
n = int(sys.stdin.readline())
cnt = 0
six_n = 666
while True:
if '666' in str(six_n):
cnt += 1
if cnt == n:
print(six_n)
break
six_n += 1
제일 작은 종말의 숫자는 666이고, 그 다음으로 큰 수는 1666, 2666, 3666, .... 과 같다. 숌이 만든 N번째 영화의 제목에 들어간 숫자를 출력하는 프로그램 작성
> 혼자 풀어보고 싶었는데.. 입력값 n이 10000까지라길래 list(range(10000))으로 놓고 구하다가 멘탈이 나가버렸다. 답지보고 푸는거 누가 못하냐구… 그래도 뭐라도 남는 게 있다면, 하다못해 해답 코드를 외운다면 그것대로 의미가 있긴 하겠지만… 스트레스 받는다ㅠㅠ
> 풀 수 있었을 것 같은데 못풀어서 구글링했다. 이런 문제에 낑낑대는 내가 싫다. 그래도 어떻게 푸는지 알아야 다음에는 안 낑낑대겠지ㅠ
> 666에서 시작해 While문 안에서 1씩 더해가며 str(숫자)에 666이 있다면 카운팅을 하고 666의 개수가 입력받은 n과 같아질 때 더해가던 숫자값을 프린트한다.
> 다음에 꼭 다시 한번 풀어보자.
https://www.acmicpc.net/problem/10809
import sys
words = 'abcdefghijklmnopqrstuvwxyz'
s = sys.stdin.readline().strip()
for x in words:
if x in s:
print(s.index(x))
else:
print(-1)
https://metamon-ditto.tistory.com/24 다시풀었씁니다(1)
> 맹세코 코드 안보고 문제만 보고 풀었습니다!!
> 위의 문제들 절반은 구글링해서 풀었던 것 같아 우울했는데 이렇게 풀었던 문제를 다시 푸니 새삼 성장한 것 같아 기분이 죠습니다
> 포인트는 words(길이)만큼 '입력받은 문자가 있는지 확인'을 반복(있다면 인덱스값 출력)하는 것입니다!
https://www.acmicpc.net/problem/2675
import sys
t = int(sys.stdin.readline())
for i in range(t):
r, s = sys.stdin.readline().split()
r = int(r); s = s.strip()
for x in s:
print(r*x, end='')
print()
https://metamon-ditto.tistory.com/24 다시풀었씁니다(2)
> 분명.. 풀었던건데.. 저 r과 s처리가 힘들었습니다. 별별 방법을 다 쓰다 결국 슬쩍.. 아주 슬쩍 봤어요.
> 나머지는 정말 손 가는대로, 생각나는대로 푼거라 조금 코드가 더럽긴 합니다.
> 제 추측인데, 마지막 줄의 print()는 다음 출력과의 구분을 두기 위함인 것 같아요. 저거 안 쓰면 틀렸다고 나옴. 또 실제로 마지막줄 안 쓴 상태로 코랩에서 돌렸을때 3 ABC와 5 /HTP 사이의 공백이 거의 없었습니당
'STUDY' 카테고리의 다른 글
파이썬 스터디 ver2. 2주차 (4) | 2022.04.05 |
---|---|
파이썬 스터디 ver2. 1주차 (3) | 2022.03.31 |
파이썬 스터디 9주차 (0) | 2022.03.04 |
파이썬 스터디 4주차(머신러닝)(3) (0) | 2022.03.03 |
파이썬 스터디 4주차(머신러닝)(2) (1) | 2022.02.22 |