출처 : 반크_백제역사 유적지구와 이스탐블 역사지구
문제]
M줄 N칸으로 되어 있는 표 위에, 달팽이 모양으로 선을 그리려고 한다.
ㅇ | ||
위의 그림은 M=5, N=3의 예이다. 이제 표의 왼쪽 위 칸(ㅇ)에서 시작하여, 오른쪽으로 선을 그려 나간다. 표의 바깥 또는 이미 그려진 칸에 닿아서 더 이상 이동할 수 없게 되면, 시계방향으로 선을 꺾어서 그려나간다.
ㅇ | → | ↘ |
↗ | ↘ | ↓ |
↑ | ↓ | ↓ |
↑ | 끝 | ↓ |
↖ | ← | ↙ |
위의 표는 선을 그려 나간 모양을 나타낸 것이다. 선이 꺾어진 부분은 대각선으로 나타내었다. 표의 모든 칸이 채워질 때까지, 선을 몇 번 꺾게 될까?
입력
첫째 줄에 M과 N이 빈 칸을 사이에 두고 주어진다. (2 ≤ M, N ≤ 100)
출력
첫째 줄에 표의 모든 칸이 채워질 때까지 선이 꺾어지는 횟수를 출력한다.
예제 입력 1
5 3
예제 출력 1
5
출처 : 백준_1952번
참고풀이]
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int r, c;//행열 변수
int i;//반복변수
int cn,cnt;//선이 꺽어지는 횟수를 구하는 변수
int sw;//증감변수
//M, N을 입력받는다.(M:행, N:열)
int M, N;
scanf("%d%d", &M, &N);
if ((M >= 2 && M <= 100) && (N >= 2 && N <= 100))
{
r = 1, c = 0;
sw = 1;//진행방향 변수
cnt = 0;
while (1)
{
//열부분
for (cn=0,i = 1; i <= N; i++)
{
c += sw;
cn++;
if (M!=1 && cn == N) cnt++;
}
if (N < 1) break;
--M;
//행부분
for (cn=0,i = 1; i <= M; i++)
{
r += sw;
cn++;
if (N!=1 && cn == M) cnt++;
}
if (M < 1) break;
--N;
//방향바꾸기
sw *= -1;
}
printf("%d", cnt);
}
return 0;
}
참고풀이 결과]
대한민국의 아름다운 영토, 독도의 여름
'프로그램 > C언어 1000제' 카테고리의 다른 글
C언어 196제] 2006년 ICPC 뉴질랜드 NZPC B번 팰린드롬수 (1) | 2024.12.04 |
---|---|
C언어 195제] 2004년 한국정보올림피아드 지역본선 중등/고등부 1번 최대공약수와 최소공배수 (0) | 2024.11.30 |
C언어 193제] 조건에 맞는 암호를 만드시오. (0) | 2024.11.29 |
C언어 192제] 평범한 배낭 (0) | 2024.11.28 |
C언어 191제] 2002년 Waterloo's local Programming Contests D번 평균은 넘겠지 (0) | 2024.11.25 |
댓글