https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&contestProbId=AV18-stqI8oCFAZN&categoryId=AV18-stqI8oCFAZN&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=2&pageSize=10&pageIndex=3

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

풀이 과정

 입력받은 값을 asb()를 이용해 절대값으로 바꿔주고, min_dis(목표 지점에서 가장 가까운 돌까지 거리)과 비교해 최소 거리와 같다면 cnt++, 더 작은 최소 거리가 나온다면 min_dis = temp, cnt = 1로 갱신해주었다. 이때 min_dis의 초기값은 최소를 구하는 문제이므로 최대값인 100000에 1을 더해주었다. 100000을 초기값으로 해도 되지만, input과 관계없는 값으로 초기화 하고 싶어서 100001로 주었다.

 

느낀 점

 이번 문제에서는 MAX값에서 0을 하나 빠트려 1회 failed를 받았다. 항상 MAX, MIN과 같은 경계 값을 체크하자.

 

#include<bits/stdc++.h>
using namespace std;

int temp, cnt, n, min_dis = 100001;

int main() {
	int T;
	cin >> T;
	for (int t = 0; t < T; t++) {
		cnt = 0; min_dis = 100001;
		cin >> n;
		for (int i = 0; i < n; i++) {
			cin >> temp;
			temp = abs(temp);
			if (min_dis == temp) cnt++;
			else if(min_dis > temp) {
				cnt = 1;
				min_dis = temp;
			}
		}
		cout << "#" << t + 1 << " " << min_dis << " " << cnt << "\n";
	}
	return 0;
}

+ Recent posts