-
[백준] 1337 - 올바른 배열알고리즘 2023. 5. 27. 11:00728x90
1. 문제
https://www.acmicpc.net/problem/1337
1337번: 올바른 배열
첫째 줄에 배열의 크기 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 배열의 원소가 한 줄에 하나씩 주어진다. 원소는 1,000,000,000보다 작거나 같은 음이 아닌 정수이
www.acmicpc.net
2. 접근
1. n개의 input 값들을 오름 차순 정렬을 해준다
2. 현재의 input값 ~ input값 + 4 ( 코드에서는 for j in range(data[i]+1, data[i]+5) ) 의 값들을 res에 넣어준다
+5 인 이유는 다들 아시겠지만, range의 마지막값은 +1을 더해줘야 하기 때문이다.
3. input 값에도 있으면서 res에도 있을때 cnt 값을 증가해서 cnt중 가장 큰 maxVal을 구한다
4. 4-maxVal을 출력
=> data의 모든 원소들을 기준으로 +4까지 res에 넣고, 그 안에 들어오는 data의 개수 체크해서 가장 많은거 골라서 4에 빼주면 된다.
처음에는 n의 범위가 10억인줄 알고 시간초과 날거같아서 안했는데 알고 보니 data 원소의 범위가 10억 이하인 자연수다...3. 풀이
# 1337 실버4 import sys input = sys.stdin.readline n = int(input()) data = [] for i in range(n): data.append(int(input())) data.sort() maxVal = 0 for i in range(n): cnt = 0 res = [] for j in range(data[i]+1,data[i]+5): res.append(j) for d in data: if d in res: cnt += 1 if cnt > maxVal: maxVal = cnt print(4-maxVal)
'알고리즘' 카테고리의 다른 글
[프로그래머스] 소수 찾기 (0) 2023.06.28 [프로그래머스] 가장 큰 정사각형 찾기 (0) 2023.06.26 [백준] 2659 - 십자카드 문제 (0) 2023.05.24 [백준] 2567 - 색종이 2 (0) 2023.05.24 [백준] 1235 - 학생 번호 (0) 2023.05.17