CodeForces - Browser) 복습을 위해 작성하는 글 2023-11-01

rizz·2023년 11월 1일
0

CodeForces

목록 보기
1/1

⌛ CodeForces - B. Browser(Educational Codeforces Round 36 (Rated for Div. 2))

📘 문제 요약

현재 인터넷 서핑 중에 여러 개의 탭을 켜 놓았는데,
필요한 탭(l~r)을 제외한 나머지 탭을 최대한 빠르게 닫았을 때의 시간을 출력하라.
탭은 1~n까지 색인화되어 있다.
현재 커서 위치가 pos로 주어진다.
l의 왼쪽은 한 번에 모두 닫을 수 있다.
r의 오른쪽은 한 번에 모두 닫을 수 있다.
pos에서 한 칸씩 이동할 때마다 1의 시간이 걸린다.

Input
4개의 자연수가 입력으로 주어진다.
n, pos, l, r (1 <= n <= 100, 1 <= pos <= n, 1 <= l <= r <= n)

Output
[l, r] 외의 탭을 닫는 데에 걸리는 최소 시간을 자연수로 출력하라.

문제 링크: https://codeforces.com/contest/915/problem/B

 

📝 구현

// C++
#include <bits/stdc++.h>

using namespace std;

int main() {
	short n, pos, l, r;
	cin >> n >> pos >> l >> r;
	short res = 0;

	if (l == 1 && r != n) {
		res = abs(pos - r) + 1;
		cout << res;
		return 0;
	}
	else if (r == n && l != 1) {
		res = abs(pos - l) + 1;
		cout << res;
		return 0;
	}
	else if (l == 1 && r == n) {
		cout << res;
		return 0;
	}
	else {
		short lDistance = abs(pos - l);
		short rDistance = abs(pos - r);

		if (lDistance < rDistance) {
			res = lDistance + r - l + 2;
			cout << res;
			return 0;
		}
		else {
			res = rDistance + r - l + 2;
			cout << res;
			return 0;
		}
	}
}

 

🙄 Thinking...

문제를 해석하자마자 떠오른 아이디어를 위 코드로 구현해 보았다.

하지만 구현하면서도 찝찝함이 있었다...

왜냐하면 위 코드처럼 경우의 수마다 처리해 주는 것이 아닌 더 효율적인 방법이 있을 것 같다는 생각이 막연히 들었기 때문이다...

시간상 마무리하지만, 다음에 이 글을 읽을 때 좀 더 고민해 봐야겠다...

profile
복습하기 위해 쓰는 글

0개의 댓글