Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- #코린이 #코딩 #할 수 있다
- 5장
- 코딩테스트
- 운체 1주차
- git 오류
- 1주차(1)
- 백준
- c언어
- python기초
- 인텔리제이
- python기본
- 데베시 1주차
- 코테
- DP
- 최단거리
- 4장
- c언어 기본
- 스택
- c언어 제어문
- 자료구조
- 인스타
- 참고X
- git오류
- 파이썬 알고리즘 인터뷰
- git기초
- Git
- 그리디
- python자료형
- Workbench
- 도커
Archives
- Today
- Total
하루살이 개발자
[백준] 자료구조 유형 본문
# boj_17413 단어뒤집기2 - 실버3
import sys
word = list(sys.stdin.readline().rstrip())
i = 0
start = 0
while i < len(word):
if word[i] == "<":
i += 1
while word[i] != ">":
i += 1
i += 1
elif word[i].isalnum(): # 숫자나, 알파벳을 만나면
start = i
while i < len(word) and word[i].isalnum():
i += 1
t = word[start:i]
t.reverse()
word[start:i] = t
else:
i += 1
print(''.join(word))
[python 정리]
isalnum(): 문자열이 영어, 한글 혹은 숫자로 되어있으면 참 리턴, 아니면 거짓 리턴 -> 영어, 한글, 숫자
isalpha(): 문자열이 영어 혹은 한글로 되어있으면 참 리턴, 아니면 거짓 리턴 -> 영어, 한글
# boj_17298 오큰수 - 골드4
이중 for 문으로 돌면 시간초과 남 -> stack을 이용해서 해결하기
import sys
from collections import deque
input = sys.stdin.readline
n = int(input())
nums = list(map(int, input().split()))
answer = [-1] * n
stack = deque()
for i in range(n):
while stack and (stack[-1][0] < nums[i]):
a, index = stack.pop()
answer[index] = nums[i]
stack.append([nums[i], i])
print(*answer)
# boj_17299 오등큰수 - 골드3
- 오큰수와 매우 유사한 문제
- Counter을 이용해서 각 숫자 별 갯수를 먼저 구해놓아야 한다
import sys
from collections import Counter
from collections import deque
input = sys.stdin.readline
n = int(input())
nums = list(map(int, input().split()))
c = Counter(nums)
answer = [-1] * n
stack = deque()
for i in range(len(nums)):
while stack and (c[stack[-1][0]] < c[nums[i]]):
a, index = stack.pop()
answer[index] = nums[i]
stack.append([nums[i], i])
print(*answer)
[Python]
from collections import Counter
nums = [1, 1, 2, 3, 4, 2, 1]
c = Counter(nums)
print(c) # Counter({1: 3, 2: 2, 3: 1, 4: 1})
# boj_1935 후위표기식2 - 실버3
ord(i) - ord('A')를 이용해서 스택에 저장하는 것이 포인트!
from collections import deque
n = int(input())
s = input()
l = []
stack = deque()
for i in range(n):
l.append(int(input()))
answer = l[0]
for i in s:
if i.isalpha():
stack.append(l[ord(i) - ord('A')]) # 0 1 2 3 4
else:
s2 = stack.pop()
s1 = stack.pop()
if i == '*':
stack.append(s1 * s2)
elif i == '+':
stack.append(s1 + s2)
elif i == '/':
stack.append(s1 / s2)
elif i == '-':
stack.append(s1 - s2)
print('%.2f' %stack[0])
[Python]
소수 두번째 자리까지 출력 - print('%.2f' %stack[0])
# boj_1918 후위표기식 - 골드2
우선순위: () -> * / -> * -
import sys
input = sys.stdin.readline
letters = input()
stack = []
ans = ''
for i in letters:
if i.isalpha():
ans += i
else:
if i == '(':
stack.append(i)
elif i == '*' or i == '/': # 먼저 들어오고 같은 우선순위에 있는 */는 ans에 넣어줌
while stack and (stack[-1] == '*' or stack[-1] == '/'):
ans += stack.pop()
stack.append(i)
elif i == '+' or i == '-': #이보다 낮은 우선 순위가 없어서 연산자이면 전부 ans에 넣어줌
while stack and stack[-1] != '(':
ans += stack.pop()
stack.append(i)
elif i == ')': # 닫음 괄호와 열음 괄호 사이에 있는 연산자들 전부 반환
while stack and stack[-1] != '(':
ans += stack.pop()
stack.pop()
while stack:
ans += stack.pop()
print(ans)
# boj_10820 문자열 분석
- rstrip('\n'): 줄바꿈 무시
import sys
input = sys.stdin.readline
while True:
line = input().rstrip('\n')
if not line:
break
l, u, d, s = 0, 0, 0, 0
for target in line:
if target.islower(): # 소문자
l += 1
elif target.isupper(): # 대문자
u += 1
elif target.isdigit(): # 숫자
d += 1
elif target.isspace(): # 공백
s += 1
print(l, u, d, s)
'코딩테스트' 카테고리의 다른 글
[백준] 14501 퇴사 (by Python) (0) | 2023.03.20 |
---|---|
[프로그래머스] Level2 문제풀이 (Python) (0) | 2023.03.16 |
[Softeer] Level3 문제풀이 by Python (2) | 2023.02.04 |
[Softeer] Level2 문제풀이 by Python (0) | 2023.02.03 |
[SQL] 리트코드 SQL 문제 모음 (0) | 2023.01.06 |