일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- frontend
- Javascript
- 동적 계획법
- network
- Database
- 리트코드
- vscode
- git
- DFS
- 프로그래머스
- 다이나믹 프로그래밍
- Graph
- 안드로이드
- Python
- db
- LeetCode
- 알고리즘
- 그레이들
- CS
- Data Structure
- 백준
- Algorithm
- BFS
- react
- VIM
- DP
- TypeScript
- java
- Redux
- 자바
Archives
- Today
- Total
늘 겸손하게
백준 10709 - 기상캐스터 ( C++ ) 본문
안녕하세요 besforyou입니다
백준 문제 10709번 문제 풀이를 설명하겠습니다
문제 풀이
c가 나온 지점으로부터 오른쪽으로 얼마나 떨어져 있는지를 알아내어 출력하는 문제입니다.
이 문제에 dp 알고리즘을 적용하면 O(H*W) 시간안에 풀어낼 수 있습니다.
1. 구름의 위치 입력값을 받을 2차원 배열 cloud와 정답을 기록할 2차원 배열 ans를 생성합니다.
2. 2차원 배열 ans의 모든 원소값은 -1로 초기화합니다. (memset 이용)
3. 2차원 배열 cloud에 모든 입력값을 저장합니다.
4. for문을 이용하여 cloud의 모든 원소를 순차적으로 참조하는데,
1. 해당 cloud 좌표에 c가 있는 경우 : 0
2. c가 참조되지 않았지만 이전 원소가 -1이 아닌 경우(c가 이전에 이미 읽힌 경우) : 이전 원소 값 + 1
를 출력합니다.
이때 정답으로 출력하는 값을 또 다른 배열 ans에 기록하여 이후의 계산에 활용합니다.
코드
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
32
33
34
|
#include <iostream>
#include <cstring>
using namespace std;
// 1
char cloud[101][101];
int ans[101][101];
int main (void) {
int H,W;
cin >> H >> W;
// 2
memset(ans, -1, sizeof(ans));
// 3
for (int i = 1; i <= H ; i++) {
for (int j = 1; j <= W ; j++ )
cin >> cloud[i][j];
}
// 4
for (int i = 1; i <= H ; i++) {
for (int j = 1; j <= W ; j++ ) {
if ( cloud[i][j] == 'c' ) { //4 - 1
ans[i][j] = 0;
}
else if ( cloud[i][j] == '.' && ans[i][j-1] != -1 ) { //4 - 2
ans[i][j] = ( ans[i][j-1] + 1 );
}
cout << ans[i][j] << " ";
}
cout << endl;
}
return 0;
}
|
cs |
결과
'코딩 문제 > 백준' 카테고리의 다른 글
백준 2839 - 설탕 배달 ( C++ / Java ) (0) | 2021.09.26 |
---|---|
백준 7570 - 줄세우기 ( Java ) (0) | 2021.09.24 |
백준 16395 - 파스칼의 삼각형 ( C++ ) (0) | 2021.09.05 |
백준 12865 - 평범한 배낭 (C++) (0) | 2021.08.31 |
백준 11660 - 구간 합 구하기 5 (0) | 2021.08.30 |