티스토리 뷰

728x90
반응형

백준 온라인 저지(BOJ) 2566번 최댓값

https://www.acmicpc.net/problem/2566

 

2566번: 최댓값

첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다. 최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다.

www.acmicpc.net

* 사용언어 : C언어, C++

 

1. 문제

9 × 9 격자판에 있는 81개 숫자 중 최댓값을 찾고 행과 열을 출력

(최대값이 여러 개인 경우 아무거나 출력)

 

2. 풀이

2차원 배열의 행, 열 개념을 알면 쉽게 풀 수 있는 문제입니다.

행은 y축(상하), 열은 x축(좌우)이라고 보시면 됩니다.

 

2차원 배열을 선언하고 입력 받은 후에 다시 탐색해도 되지만

배열 없이 입력을 받으면서 바로 최대값을 찾는 방식으로 구현했습니다.

 

최대값을 찾는 방식은 단순하지만 초기화를 잘 해주어야 합니다.

단순하게 ① 입력의 첫 번째 값으로 해도 되고, ② 모든 입력값보다 작은 값으로 해도 됩니다.

저는 모든 입력값(자연수 or 0) 보다 작은 -1 로 초기화하고 시작했습니다.

 

추가로 for 문을 1개만 사용해서 1차원으로 index 를 찾은 뒤 /, % 로 처리하는 방식도 있지만

단계 별로 풀어보기 순서 상 난이도가 적합하지 않는 것 같아서 2중 for 문으로 단순하게 구현했습니다.

 

그 외 풀이는 아래 코드로 대체하겠습니다.

 

3. 코드

#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
/*
2566_최댓값
1112kb	0ms
*/
#include <cstdio>

int main() {
#ifdef _WIN32
	freopen("input.txt", "r", stdin);
#endif // _WIN32
	int max = -1, ym, xm, input;
	for (int y = 1; y < 10; ++y) {
		for (int x = 1; x < 10; ++x) {
			scanf("%d", &input);
			if (input > max) {
				max = input;
				ym = y;
				xm = x;
			}
		}
	}
	printf("%d\n%d %d\n", max, ym, xm);
	return 0;
}

 

728x90
반응형
댓글