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
- SGD
- 머신러닝
- pytorch
- 코테
- 웹크롤링
- 데이터 엔지니어링
- 코딩테스트
- Cosine-similarity
- 딥러닝
- selenium
- 프로그래머스
- 백준
- 부스트캠프
- 협업 필터링
- 웹스크래핑
- 추천 시스템
- Python
- coursera
- 시각화
- Tensor
- 추천시스템
- wordcloud
- 파이썬
- Overfitting
- recommendation system
- codingtest
- 분산 시스템
- TF-IDF
- 데이터
- 알고리즘
Archives
- Today
- Total
개발자식
[백준] 19799_ 자료구조 본문
✔︎문제: https://www.acmicpc.net/problem/10799
10799번: 쇠막대기
여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저
www.acmicpc.net
✏️ 나의 풀이
- ()인 레이저인 경우와, 막대기인 경우 두가지로 나뉘는데 레이저인 경우 지금까지 쌓여있는 막대기를 수직으로 자른다.
ex) (()) : 막대기 한개 레이저 한개로 두동강 남 -> 답: 2
- 막대기인 경우 stick 리스트에 쌓아주고, 레이저인 경우 stick에 쌓인 막대기개수 더해준다. 그리고 막대기가 끝나는 지점이라면 리스트에서 빼주고 +1 한다.
- 현재와 앞에 값을 비교하며 레이저인지, 막대기인지 확인하는 코드를 구현했다.
st = input()
stick = []
result = 0
bomb = False
for i in range(len(st)-1):
if st[i] == "(":
if st[i+1] == ")":
bomb = True
if st[i+1] == "(":
stick.append("(")
bomb = False
else:
if not bomb:
stick.pop()
result += 1
else:
result += len(stick)
bomb = False
if len(stick) > 0:
print(result + 1)
else:
print(result)
📌 다른 풀이
- 이게 더 직관적이고 깔끔하다.
- "("인 경우는 모두 리스트에 넣어주고 ")"일 때 이게 레이저인지, 막대기가 끝나는 지점인지 확인해주는 코드이다.
arr = list(input())
stack = []
answer = 0
for i in range(len(arr)):
if arr[i] == '(':
stack.append("(")
else:
if arr[i-1] == "(":
stack.pop()
answer += len(stack)
else:
stack.pop()
answer += 1
print(answer)
- 스택을 이용
- “(” 라면 스택에 넣는다
- “)” 라면
- 이전 문자가 “(” 라면 레이저이다. stack에서 마지막 문자 빼주고 스택에 쌓인 개수(막대기 개수)만큼 더해준다
- 이전 문자가 “)”라면 stack에서 마지막 문자 빼주고 1 더해준다. (막대기 끝자락)
구현 문제는 코드가 직관적이고 깔끔해야 코딩테스트때 실수하지 않는다.
같은 알고리즘이라도 헷갈리지 않게 구현하자.
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] Python, 시뮬레이션 14503 (0) | 2023.06.04 |
---|---|
[백준] 1439_ 그리디, 문자열 (0) | 2023.05.24 |
[백준] DP_2579 python (0) | 2022.11.10 |
[백준] DP_1003, 9461, 11726, 11727, 9095, 1463, 2193, 11053_python (2) | 2022.09.11 |
[백준] 재귀함수, 정렬_ 2447, 2750, 10989, 10814, 1427, 2947, 1431, 18870 (0) | 2022.09.07 |
Comments