
n = int(input())
m = int(input())
x = list(map(int, input().split()))
result = []
if m == 1 and x[0] == 0:
print(n)
else:
for i in range(len(x)):
if not result:
result.append(x[i])
else:
result.append((x[i] - x[i-1] + 1) // 2)
if x[-1] != n:
result.append(n - x[-1])
print(max(result))
n = int(input())
m = int(input())
x = list(map(int, input().split()))
result = []
max_distance = max(x[0], n - x[-1])
result.append(max_distance)
for i in range(1, m):
distance = (x[i] - x[i - 1] + 1) // 2
result.append(distance)
print(max(result))
입력 예시가 주어졌는데 주어진 입력 예시만으로는 풀이를 하는데 어려움이 있었다.
10
3
2 4 6
10
3
2 4 9
이 두 가지의 입력 예시를 추가로 생성하였다.
이 입력 예시의 차이점은 2 4 6의 경우 가장 마지막 구간인 4가 정답이고
2 4 9인 경우 가장 마지막 구간은 1이 나오기 때문에 앞에서 기둥 사이의 거리를 추출해내야한다.
조건에서 x에 대한 입력은 오름차순으로 입력받는 다는 것을 보고 이진탐색으로 처음 시도하였으나 뇌사와서 포기하였다.
그래서 우선 입력 예시 2번을 처리했다.
1. 기둥이 1개 주어진다.
2. 그 기둥이 0번 위치에 존재할 경우 n이 정답
나머지 예시의 경우
1. result라는 리스트를 하나 생성한다.
2. 제일 처음 시작점 0부터 첫 기둥까지의 길이를 삽입한다.
3. 그 다음은 수식을 사용하였다. 24 ~ 75번까지 있다고 치면 총 문제 수는 75 - 24 + 1로 풀이하기 때문에 이렇게 사이의 거리를 구한다. 그리고 2로 나누어서 중간점을 찾으면 된다.
아래 이미지는 A4 용지에 대충 처음에 그린건데 중간에 3이라는 것을 볼 수 있다.
4와 9사이의 거리는 9 - 4 + 1해서 6이고 이를 절반으로 나누면 3이 되는 것을 확인할 수 있다.

4. 그리고 마지막 기둥의 오른쪽 남은 부분을 삽입한다.
5. 이 중 가장 큰 값이 정답
훨씬 깔끔한 방법이다.
1. result라는 리스트를 하나 생성한다.
2. 가장 큰 값이 정답이기 때문에 최장 길이 변수를 하나 선언한다.
초기 값은 시작점 0부터 첫 기둥의 거리, 마지막 기둥부터 끝점까지의 거리 중 하나이다.
3. 반복문을 순회하며 x리스트에 주어진 길이를 넣어주면 끝난다.
두 번째 풀이가 훨씬 깔끔하고 첫 번째 풀이 코드에서 불필요한 부분들을 제거한 모습을 확인할 수 있다.
생각보다 시간이 오래걸렸다.
실버4라고 하기엔 나중에 실버 3 ~ 2정도로 티어가 올라갈 것으로 예상된다.
코드 자체는 단순하지만 지문을 보고 뇌사가 올 수 있다.