Machineboy空
10709 : 기상캐스터 - if 조건부 구성 본문
https://www.acmicpc.net/problem/10709
10709번: 기상캐스터
출력은 H 행으로, 각 행에는 공백으로 구분된 W 개의 정수를 출력한다. 출력의 i 번째 행 j 번째 정수 (1 ≦ i ≦ H, 1 ≦ j ≦ W) 는, 지금부터 몇 분후에 처음으로 구역 (i, j) 에 구름이 뜨는지를 표시
www.acmicpc.net
문제요약
구름의 이동거리
난이도
Silver 5
풀이 포인트
- 조건부 깔끔히 구성
- 현재 칸에 구름이 있니?
- 없다면 이전에 구름이 있었니?
아래 문자의 숫자니? 그러면 축적, 숫자가 아니니? 그럼 축적된게 있니? 로직과 비슷
https://machineboy0.tistory.com/172
2870 : 수학숙제 - stoi, 문자열기반 숫자 대소비교, custom operator
https://www.acmicpc.net/problem/2870 2870번: 수학숙제 종이에서 찾은 숫자의 개수를 M이라고 하면, 출력은 M줄로 이루어져야 한다. 각 줄에는 종이에서 찾은 숫자를 하나씩 출력해야 한다. 이때, 비내림차
machineboy0.tistory.com
REVIEW
쉽게 풀 수 있는 문제지만, 조건부를 머리 좋게 구성하는 법을 또 생각해야 했던 문제.
1. 나의 조건부 구성
- 처음 cnt는 -1부터 시작
- 첫칸이 구름이면 0으로 갱신
- 다음부터는 현재칸이 구름이면 cnt 0으로 갱신, 이줄에 구름이 있음을 판단하는 hasCloud 플래그 변수 true
- hasCloud가 true면 cnt++; 다시 구름을 만나면 0으로 갱신되는식.
뭔가 많이도 복잡하다.
gpt에게 깔끔하게 정리해달라고 했더니 플래그 변수를 일단 지워버리고 cnt가 -1인지로 이전에 구름이 있었는지를 체크하더라.
2. gpt의 조건부 구성
그래서 수학숙제 문제와 비슷한 조건부가 완성되었다.
- 현재 칸이 구름이니? 그렇다면 cnt 0
- 구름이 아니라면? cnt 가 -1이니? 즉 이전에 구름이 없었니? 그게 아니라면 cnt ++;
3. 모범답안 조건부 구성
우선 구름 배열을 0,1이 아닌 -1과 0으로 채워두고,
- 현재칸이 구름이라면? 0을 만날 때 까지 즉 -1인 동안 cnt++ 해줌
쉬운 문제일 수록 다양하고 똑똑한 풀이법이 많은 것 같다. 조건부 깔끔하게 구성하는 법 고안하기!
CODE
#include <bits/stdc++.h>
using namespace std;
int h, w, a[101][101], ret[101][101]; // ret 배열도 굳이 필요 없음 cnt를 바로 출력하면 됌.
char s;
int main()
{
cin >> h >> w;
for (int i = 0; i < h; i++)
{
for (int j = 0; j < w; j++)
{
cin >> s;
if (s == 'c')
{
a[i][j] = 1;
}
}
}
for (int i = 0; i < h; i++)
{
int cnt = -1;
for (int j = 0; j < w; j++)
{
if (a[i][j] == 1)
{
cnt = 0;
}else if(cnt!=-1){
cnt++;
}
ret[i][j] = cnt;
cout << ret[i][j] << " ";
}
cout << '\n';
}
}
#include <bits/stdc++.h>
using namespace std;
int n, m, a[104][104];
string s;
int main()
{
cin >> n >> m;
for (int i = 0; i < n; i++)
{
cin >> s;
for (int j = 0; j < m; j++)
{
if (s[j] == '.')
a[i][j] = -1;
else
a[i][j] = 0;
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (a[i][j] == 0)
{
int cnt = 1;
while (a[i][j + 1] == -1)
{
a[i][j + 1] = cnt++;
j++;
}
}
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
cout << a[i][j] << " ";
cout << "\n";
}
return 0;
}
'Computer > Coding Test' 카테고리의 다른 글
1436 : 영화감독 숌 - 숫자, 문자 변환 / 브루트 포스 (0) | 2024.02.16 |
---|---|
3474 : 교수가 된 현우 - 소인수 분해, ios_base::sync_with_studio(false);cin.tie(NULL);cout.tie(NULL) (1) | 2024.02.15 |
2870 : 수학숙제 - stoi, 문자열기반 숫자 대소비교, custom operator (1) | 2024.02.15 |
4659 : 비밀번호 발음하기 - 플래그 (1) | 2024.02.15 |
2910 : 빈도 정렬 - map, 카운팅, 정렬 (0) | 2024.02.14 |