Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- pcce 기출문제 10번 공원 풀이
- python 고대 문명 유적 탐사
- depth-stencil
- 오블완
- pcce 기출문제 풀이
- 백준 5567
- DirectX12
- boj 5567
- DirectX
- PCCE
- pcce 기출문제 9번 지폐 접기
- 잔디 기부
- constant buffre
- 프로그래밍공부
- 고대 문명 유적 탐사
- 잔디 기부 캠페인
- pccp 기출문제 풀이
- 렌더링 파이프
- 수식 복원하기
- root signature
- 코드트리 고대 문명 유적 탐사
- texture mapping
- pcce 기출문제 10번 공원
- c++ 5567
- 티스토리챌린지
- pcce 기출문제 10번 지폐 접기 풀이
- directx 그래픽스
- boj 1991
- gemmasprint
- c++ 1991
Archives
- Today
- Total
오구의코딩모험
[Python] 1015번 : 수열 정렬 본문
반응형
문제 설명 3줄 요약
1. 길이가 N인 수열 P(0부터 N-1까지의 수를 한번씩 포함), 길이가 N인 배열 A, 길이가 N인 배열 B가 있다.
2. 수열 P를 배열 A에 적용하면 배열 B가 된다. B[P[i]] = A[i]
3. 배열 A가 주어졌을 때, 수열 P를 적용하면 비내림차순이 된다. 수열 P를 찾아라!
문제에서 포인트는
비내림차순 과 B[P[i]] = A[i] 식을 만족하는 것!
여기서 비내림차순은
이해하기로는.. 오름차순에서 같은 원소가 있을 때를
고려해준 정렬 방법이라고 이해하고 풀었다!
Ex) 1, 2, 3 = 오름차순, 비내림차순
1, 2, 2, 3 = 비내림차순
이해했다면
입력 조건을 만족하는 틀 부터 짜보자!
# 배열 A의 크기 N 입력, ex) 3
N = int(input())
# 배열 A의 원소 입력, ex) A = 2 3 1
A = list(map(int, input().split()))
# 배열 A를 정렬한 배열 B, ex) B = 1 2 3
B = A.copy()
B.sort()
# 수열 p
p = list()
그냥 오름차순이라면 쉽겠지만,
비내림차순 이기 때문에
같은 숫자가 있을 때, 사전순 이라는 조건을 만족해줘야한다!
if __name__ == '__main__':
for i in range(N):
# 정렬된 배열 B에 A[i] 원소가 있으면, 위치 반환
# ex) A[0] = 2, B.index(2) = 1 따라서 catch = 1
# B[P[i]] = A[i] 이므로 곧 catch가 P[i]이다.
catch = B.index(A[i])
# catch가 마지막 원소인 경우
if (catch < N-1):
# 다음 원소와 같지 않을 때
if (B[catch] != B[catch+1]):
p.append(B.index(A[i]))
# 다음 원소와 같다면, 사전순으로 넣기
elif (B[catch] == B[catch+1]):
p.append(B.index(A[i]))
B[catch] = -1
# catch가 마지막 원소가 아닌 경우
elif ~(catch < N-1):
p.append(B.index(A[i]))
# list p 문자열로 합치기
answer = " ".join(str(value) for value in p)
print(answer)
A가 예시와 같이
A[0] = 2, A[1] = 3, A[2] = 1 이고
B[0] = 1, B[1] = 2, B[2] = 3 일 때,
B[P[I]] = A[I] → B[P[0]] = A[0] → B[P[0]] = 2 → P[0] = 1
위의 코드에서 catch 는 P[i] 를 의미한다!
결과
마지막에 list를 문자열로 바꿔주지 않아서
뭐가 틀린건지 계속 고민하고 있었다..!
제출 형식도 잊지말고 확인할 것
반응형
'프로그래밍 공부 > 백준 알고리즘' 카테고리의 다른 글
[Python] 1003번 : 피보나치 함수 (0) | 2023.02.12 |
---|---|
[Python] 1002번 : 터렛 (0) | 2022.08.08 |
[Python] 1018번 : 체스판 다시 칠하기 (0) | 2022.08.07 |
[Python] 1059번 : 좋은 구간 (0) | 2022.08.05 |
[Python] 1010번 : 다리 놓기 (0) | 2022.08.05 |
Comments