티스토리 뷰
반응형
문제:www.acmicpc.net/problem/10972
이 문제는 N과M에서 했던 것을 이용하여 풀면 시간초과나는 것이 확정이기 때문에 그 방법으로 안 풀었다.
그렇다고 어떻게 풀어야 할 지 몰라서 결국 다른 분들이 어떻게 풀었나 찾아보았다.
풀이법은 이 블로그를 통해 봤다.
참고: fieldanimal.tistory.com/24
코드는 백준 맞은 사람 python3 중에 랭킹 1등에 해당하는 코딩을 봤다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import sys
n = int(sys.stdin.readline())
seq = sys.stdin.readline().rstrip().split(' ')
seq = [int(x) for x in seq]
end = 0
findPoint = False
for i in range(len(seq)-1, 0, -1):
if seq[i-1] < seq[i]:
end = i-1
findPoint = True
break
if findPoint == True:
for j in range(len(seq)-1, end, -1):
if seq[end] < seq[j]:
seq[j], seq[end] = seq[end], seq[j]
break
seq = seq[:end+1] + seq[len(seq)+1:end:-1]
sys.stdout.write(' '.join(map(str,seq))+'\n')
else:
print(-1)
|
cs |
첫번째로 처음부터 끝까지 다 내림차순이면 마지막이므로 findPoint를 False상태 그대로 두고 그렇지 않다면 True로 바꾼다음 if문에서 다음 순열을 찾는다.
end는 오른쪽에서 왼쪽까지 가는데 더이상 내림차순이 아닌 숫자인 것을 의미한다.
다음 순열 찾는 for문에서 end에 위치에 있는 값보다 크면서 가장 가까운 값을 찾는다. 그런다음 swap을 하고나서 end에 위치까지는 그대로 두고 그 뒤에 있는 숫자들은 역순으로 돌린다. 그러면 정답이 나온다.
반응형
'알고리즘 > 백준' 카테고리의 다른 글
맞춰봐 1248번 백준 파이썬 (0) | 2020.12.08 |
---|---|
외판원 순회2 10971번 백준 파이썬 (0) | 2020.12.07 |
15664번 N과M(10) 백준 (0) | 2020.12.06 |
15663번 N과M(9) 백준 (0) | 2020.12.06 |
1107번 리모컨 백준 (0) | 2020.12.05 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Command Line
- 백준
- 알고리즘
- Pattern
- Python
- django
- 자바
- Celery
- PostgreSQL
- setattr
- 프로그래머스
- 면접
- 파이썬
- DRF
- ubuntu
- headers
- env
- 2021 KAKAO BLIND RECRUITMENT
- postgres
- 카카오
- 그래프
- Spring
- dockerignore
- docker-compose
- Collections
- Java
- Linux
- BFS
- docker
- thread
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함