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
- 백준 등수매기기
- 백준18352
- 백준18230
- 예쁜타일링
- Python
- 백준 5212
- 백준 2659
- 백준 13901
- 백준 트리
- 백준 1713
- 눈높이개발
- 백준 주사위 쌓기
- 알고리즘
- 백준2116
- 백준 자리배정
- 백준 최소비용 구하기
- 백준13164
- 백준 10157
- 14247
- 백준 4803
- 백준 특정거리의도시찾기
- 백준 유턴 싫어
- 백준 십자카드 문제
- 백준2823
- 파이썬
- 백준 2012
- 백준 후보 추천하기
- 백준 로봇
- 백준
- 백준 지구 온난화
Archives
- Today
- Total
개발 기록
[알고리즘|파이썬] 백준 2659 십자카드 문제 본문
문제 링크: https://www.acmicpc.net/problem/2659
📌 문제 탐색하기
시간 제한: 1초
메모리 제한: 128 MB
📌 풀이하기
입력으로 주어진 카드의 시계수를 계산하여, 그 시계수가 모든 시계수들 중에서 몇 번째로 작은 시계수인지를 알아내시오
시계수: 카드의 숫자들을 시계 방향으로 읽어서 만들어지는 네 자리 수들 중에서 가장 작은 수
주어지는 4개의 숫자는 1 이상 9 이하의 숫자
📌 코드 설계하기
1. 입력된 숫자들의 시계수 계산
• 4개의 숫자로 만들 수 있는 4가지 회전 형태를 구한다.
• 그중 가장 작은 값(시계수) 을 선택한다.
2. 모든 가능한 시계수를 구하고 정렬
• 1111부터 9999까지 가능한 모든 4자리 조합을 만들고,
• 각 조합의 시계수를 계산한 후, 중복을 제거하여 저장한다.
• 저장한 시계수 리스트를 오름차순 정렬한다.
3. 입력된 시계수의 순위 찾기
• 정렬된 시계수 리스트에서 입력된 시계수의 위치(index + 1) 를 출력한다.
📌 시도 회차 수정 사항
1회차: 틀렸습니다
처음 구현할때 시계수가 _ _ _ _ 4 자리 수라고 할때
첫째자리는 둘째자리보다 작거나 같고,
둘째자리는 셋째자리보다 작거나 같고,
셋째자리는 넷째자리보다 작거나 같다
라고 생각을 잘못했다.
a, b, c, d = 1, 1, 1, 1
clock_number = list()
for a in range(1, 10):
for b in range(a, 10):
for c in range(b, 10):
for d in range(c, 10):
clock_number.append(int(str(a)+str(b)+str(c)+str(d)))
이렇게 시계수를 구하는 경우에는 3 2 2 7 이 주어졌을 때 2 2 7 3 이 시계수이지만,
정렬 후 구하게 되면, 2 2 3 7이 시계수가 된다.
즉 내가 빠트린 조건은 4개의 숫자의 순서를 지켜야한다는 것이다.
이 부분을 고려하여 다시 시계수 리스트를 구하여 풀었다.
📌 정답 코드
def get_clock_number(numbers):
rotations = [
int("".join(map(str, numbers))),
int("".join(map(str, numbers[1:] + numbers[:1]))),
int("".join(map(str, numbers[2:] + numbers[:2]))),
int("".join(map(str, numbers[3:] + numbers[:3]))),
]
return min(rotations)
input_list = list(map(int, input().split()))
clock_number = get_clock_number(input_list)
unique_clock_numbers = set()
for a in range(1, 10):
for b in range(1, 10):
for c in range(1, 10):
for d in range(1, 10):
unique_clock_numbers.add(get_clock_number([a, b, c, d]))
sorted_clock_numbers = sorted(unique_clock_numbers)
print(sorted_clock_numbers.index(clock_number) + 1)
'알고리즘' 카테고리의 다른 글
[알고리즘|파이썬] 백준 3085 사탕 게임 (0) | 2025.02.22 |
---|---|
[알고리즘|파이썬] 백준 13901 로봇 (0) | 2025.02.22 |
[알고리즘|파이썬] 백준 2823 유턴 싫어 (0) | 2025.02.20 |
[알고리즘|파이썬] 백준 2012 등수 매기기 (0) | 2025.02.19 |
[알고리즘|파이썬] 백준 4803 트리 (0) | 2025.02.18 |