티스토리 뷰
728x90
반응형
문제
초기 유성 위치 정보가 주어졌을 때, 한 덩어리의 유성이 땅위에 떨어졌을 때의 모습을 출력하는 문제이다.
유성은 "X", 땅은 "#", 공기는 "."으로 주어진다..
유성은 가장 위에 존재하며, 맨 밑 줄은 모두 땅이다.
그리고 땅 위에 공기층이 적어도 1칸 존재한다.
유성은 수직으로 낙하하며, 유성과 땅의 원형은 변하지 않는다.
풀이
- 열 별로 유성과 땅 사이의 거리의 최솟값을 구하고
- 해당 거리만큼 유성만 이동시킨 모습을 출력해야한다.
- 열 별로 유성과 땅의 거리는 상단(0)에서부터 가장 먼 유성(meteor)과 가장 가까운 땅(i) 사이의 거리이다.
- 모든 열을 탐색하면서 유성(X)이 나타났을 땐 meteor 값을 업데이트하고,
- 최초로 땅을 만났을 때 meteor값과 i값 사이의 거리를 도출하여 (i-meteor-1)
- 유성과 땅 사이의 거리의 최솟값(dist)을 구한다.
- dist만큼 유성이 이동했다는 것은 유성이 dist만큼 내려감으로 하늘의 맨 윗줄부터 dist줄까지는 모두 공기층이 된다는 의미이다. 따라서 땅 이외에는 모두 공기층으로 출력한다.
- dist층 이후로는 각 위치에서 dist 거리 위쪽에 유성이 존재했다면 현 위치에 유성이 존재한다는 의미임으로 "X"를 출력한다.
Python 코드
import sys
input = sys.stdin.readline
n,m = map(int, input().split())
arr = [input() for _ in range(n)]
# 유성과 땅 사이의 최소 거리
def get_dist():
dist = n
for j in range(m):
# 유성이 없으면 거리를 최대로 주기 위해 음수로 설정
meteor = -3001
for i in range(n):
# 유성이면 유성 위치를 업데이트
if arr[i][j] == "X":
meteor = i
# 땅을 만나면 최소 거리 업데이트
elif arr[i][j] == "#":
dist = min(i - meteor - 1,dist)
break
return dist
# 최소 거리
dist = get_dist()
# dist만큼 유성이 이동함으로 땅 외에는 공기만 존재
for i in range(dist):
res = ""
for j in range(m):
if arr[i][j] == "#":
res += "#"
else:
res += "."
print(res)
# dist만큼 이동한 유성 위치 표시
for i in range(dist, n):
res = ""
for j in range(m):
if arr[i-dist][j] == "X":
res += "X"
elif arr[i][j] == "#":
res += "#"
else:
res += "."
print(res)
문제출처
728x90
반응형
'Study > Coding Test' 카테고리의 다른 글
[백준 BOJ / Python] 17352번 여러분의 다리가 되어 드리겠습니다! (0) | 2023.03.20 |
---|---|
[백준 BOJ / Python] 4158번 CD (0) | 2023.03.13 |
[백준 BOJ / Python] 17070번 파이프 옮기기 1 (0) | 2023.03.08 |
[백준 BOJ / Python] 2293번 동전 1 (0) | 2023.03.07 |
[백준 BOJ / Python] 24524번 아름다운 문자열 (0) | 2023.03.04 |
댓글
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
TAG
- 알고리즘
- dfs
- Transformer
- 구현
- COLAB
- 분리집합
- 백준
- Look-ahead Mask
- disjoint set
- 그리디
- 트랜스포머
- MySQL
- 누적합
- BFS
- boj
- 파이썬
- DP
- Algorithm
- 코딩테스트실력진단
- 수학
- pytorch
- Prefix sum
- greedy
- padding mask
- python
- FastAPI
- 이분탐색
- lis
- 코드트리
- 코딩테스트
링크