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
- string construction
- DirectX
- 비밀 코드 해독
- DirectX12
- boj 21921
- boj 1717
- 프로그래밍공부
- PCCE
- pccp 기출문제 풀이
- dp
- 색종이와가위
- LCS
- 브루트포스
- count triplets
- 2025 프로그래머스 코딩챌린지 1차예선
- special string again
- boj 6443
- boj 20207
- ice cream parlor
- 지게차와 크레인
- c++
- making anagrams
- boj 1074
- lock free stack
- lock based queue
- lock based stack
- pcce 기출문제 풀이
- 홀짝트리
- two characters
- boj 11657
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