일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 자료형
- 파이썬
- AWS
- API
- r script
- 이클립스
- Judge
- 백준
- mariadb
- Java
- r
- 프레임워크
- ubuntu
- 배열
- online
- 저지
- BAEKJOON
- 오픈한글
- 자바스크립트
- 설치
- spring
- 토네이도
- Tornado
- Framework
- Python
- 알고리즘
- MongoDB
- 연결
- OrientDB
- 연동
Archives
- Today
- Total
맛동산
(파이썬)백준 알고리즘 1021번 회전하는 큐 본문
백준 알고리즘 저지 1021번 문제 (https://www.acmicpc.net/problem/1021)
처음에는 모듈로 연산을 이용해 환형 큐 형식으로 구현하려고 했지만 뜻대로 잘 되지 않았음
좌측, 우측 회전을 비교한 최단거리를 rPointer라는 변수에 담에서 그곳을 기준으로 다시 리스트를 재조합하는 방식으로 구현했음
D = [] # mList = [] pointer = 0 count = 0 N, M = map(int, input().split()) for i in range(1, N + 1): D.append(i) for j in map(int, input().split()): mList.append(j) #pointer = mList[0] - 1 a=[] def dial(num, p):#5 0 right = 0 left = 0 #print('point') #print(p) while True: if D[p] == num: left = len(D) - right #print('left=%d right=%d'%(left,right)) #del (D[p % len(D)]) break else: right += 1 p += 1 #print(p) if right < left: if len(D) == 0: return 0, right #if p>len(D)+1:return p-(len(D)+1), right return p, right else: if len(D) == 0: return 0, left #if p > len(D) + 1: return p - (len(D) + 1), left return p , left for i in mList: pointer=0 rPointer, rCount = dial(i, pointer) temp=D[rPointer+1:] temp+=D[:rPointer] D=temp #print('리턴값은 %d %d'%(rPointer,rCount)) #pointer = rPointer count += rCount print(count)
(이게 2달전 쯤 했던건데 지금보니 무의미한 변수가 있기도 함)
나도 길을 헤메일 누군가를 위해 코드를 공유하지만 이 글을 보고 있다면 문제 해결방법을 충분히 고민한 뒤에 찾아보는 것이길 바람
(추가적으로 알고리즘은 현답은 있지만 정답이 없는 문제라고 생각함.. 더 나은 풀이법이 있다면 다같이 공유할 수 있었으면 좋겠음!)
'파이썬 > 알고리즘' 카테고리의 다른 글
(파이썬)백준 알고리즘 1149번 RGB거리 (0) | 2017.05.25 |
---|---|
(파이썬)백준 알고리즘 1065번 한수 (0) | 2016.12.19 |
(파이썬)백준 알고리즘 1008번 A/B (0) | 2016.12.19 |
(파이썬)백준 알고리즘 1003번 피보나치 함수 (0) | 2016.12.19 |
(파이썬)백준 알고리즘 1001번 A-B (0) | 2016.12.19 |
Comments