728x90
▶문제 : 펜션 (codeup.kr)
▶코드 작성
#include <stdio.h>
int main()
{
int n, m;
int s, t;
char room[100][31];
scanf("%d %d", &n, &m);
for (int i = 0; i < n; i++) {
scanf(" %s", room[i]);
}
scanf("%d %d", &s, &t);
int count = 0, max[2] = {0};//max배열={연속으로 'O'가 나오는 개수 , 그 배열 자리}
int temp;
for (int i = s - 1; i < t - 1; i++)//고객의 일정에 맞게 범위 조정
{
max[0] = 0;
for (int j = 0, l; j < m; j++)
{
if (room[i][j] == 'O')//'O'찾으면
{
temp = 1;
for (l = i + 1; l < t - 1; l++)//temp=연속으로 나오는 개수
{
if (room[l][j] == 'O') temp++;
else break;
}
if (max[0] < temp)//연속으로 나오는 개수 중 가장 큰 값을 찾을 때
{
max[0] = temp;
if (l == t - 1)//마지막 날짜일 때 종료
{
printf("%d", count);
return 1;
}
else max[1] = l;//연속으로 나오는 값의 배열 자리
}
}
}
if (i == max[1])//전과 같은 배열 자리라면 'O'가 없다는 뜻이므로 종료
{
printf("-1");
return 0;
}
else i = max[1] - 1;//i++을 고려해서 배열 자리 대입
count++;
}
}
▶해석
for문으로 고객의 일정에 맞게 범위를 조정하였다.
두 번째 for문으로는 i(날짜)에 있는 'O'를 찾아서 'O'가 몇 번이나 연속돼서 나오는지 세 번째 for문으로 찾아서 temp에 개수를 저장하였다.
max배열로 max[0]는 for문으로 계속 나오는 temp을 비교하여 가장 큰 값으로 유지해준다.
큰 값을 찾을 때는 temp을 max [0]에 대입하고, 세 번째 for문에서 'O'개수를 구한 날짜 l이 고객의 마지막 날짜 t에서 -1 한 값과 같다면 기간이 끝나서 옮긴 횟수를 출력하고 종료한다.
아직 기간이 남으면 max[1]는 max [0]의 배열 자리(날짜)이므로 l을 대입해준다.
max [1]까지 'O'를 찾았으니 i값에 max [1]-1을 대입해준다.
만약 i값에 대입해도 전과 같은 max[1]가 온다면 i==max [1]로 체크해주어 더 이상 'O'가 없다는 뜻이므로 "-1"을 출력한다.
728x90
'코드업(codeup) > C' 카테고리의 다른 글
코드업(codeup) 3709 : 블럭 채우기 1 C언어 (0) | 2022.01.29 |
---|---|
코드업(codeup) 2655 : 1차 함수의 x절편 구하기 C언어 (0) | 2022.01.29 |
코드업(codeup) 4654 : 탑 C언어 (0) | 2022.01.20 |
코드업(codeup) 3102 : STL stack C언어 (3) | 2022.01.17 |
코드업(codeup) 3127 : 수식 계산 1 C언어 (0) | 2022.01.17 |
댓글