Kim Seon Deok
[백준] 2659 십자카드 본문
https://www.acmicpc.net/problem/2659
<시계수를 찾는 cross 함수 방법>
맨 처음 입력받은 n 은 리스트 형태이다.
이 리스트 형태의 n을 인자로 넣었을 때 맨 처음 인덱스가 맨 끝으로 가도록 반복문으로 넣어준다.
4개의 리스트가 나오게 되는데, 이 4가지 리스트를 new_num_list에 넣어준다.
new_num_list에 있는 4개의 리스트를 각각 4자리 정수로 만들어 final_num_list로 넣어준다.
final_num_list에 있는 4개의 정수 중 가장 작은 수를 출력한다. 이 가장 작은 수가 바로 시계수이다.
<정수를 리스트로 만드는 make_list함수>
4자리 정수의 각 자릿수를 리스트로 저장 ( // 연산 이용)
<리스트를 정수로 만드는 make_n함수>
리스트의 0~3번째 인덱스에 1000, 100, 10 을 곱해 더해주었다.
<시계수가 전체 시계수 중 몇 번째인지 찾는 방법>
처음에는 시계수가 1111~9999까지 천의 자리>= 백의자리 >= 십의자리 >= 일의자리라고만 생각해서 구현했는데 문제를 제대로 이해하지 않았었다. 2273 과 같은 반례가 있었다.
따라서 입력한 4가지 수에 해당하는 시계수를 찾은다음, 시계수를 리스트로 만들어주었다.
해당 시계수보다 작은 시계수 리스트의 갯수를 찾아 +1을 하면, 구하는 시계수가 몇번째로 작은 시계수인지 찾을 수 있다.
입력한 시계수보다 작은 시계수들을 담는 clock_number 리스트 생성
for문을 4번 넣어 작은 시계수를 찾아 clock_number에 append. >> 이때 시작을 시계수의 자릿수로 해야 한다.
append를 한 후 자릿수를 9로 바꾸어 준다. >> 9부터 내림차순으로 작은 시계수를 찾아가야 하므로
clock_number의 길이를 구하면 끝
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
n = list(map(int,input().split()))
def cross(num):
new_num_list = []
final_num_list = []
for i in range(0,4):
new_num = num[i:] + num[0:i]
new_num_list.append(new_num)
final_num = new_num_list[i][0]*1000 + new_num_list[i][1]*100 + new_num_list[i][2]*10 + new_num_list[i][3]*1
final_num_list.append(final_num)
a = min(final_num_list)
return a
m = cross(n)
def make_list(num):
number_list = []
x = num // 1000
y = (num - x * 1000) // 100
z = (num - x * 1000 - y * 100) // 10
w = (num - x * 1000 - y * 100 - z * 10)
number_list.append(x)
number_list.append(y)
number_list.append(z)
number_list.append(w)
return number_list
def make_n(num):
g = num[0] * 1000 + num[1] * 100 + num[2] * 10 + num[3] * 1
return g
v = make_list(m)
clock_number = []
for i in range(v[0],0,-1):
for j in range(v[1],0,-1):
for k in range(v[2],0,-1):
for p in range(v[3],0,-1):
a = 1000*i+100*j+10*k+1*p
b = make_list(a)
c = cross(b)
if a == c:
clock_number.append(a)
v[3] = 9
v[2] = 9
v[1] = 9
print(len(clock_number))
|
cs |
'python > Algorithm' 카테고리의 다른 글
[백준 14670] 병약한 영정 (0) | 2022.01.19 |
---|---|
[백준] 2485 가로수 (0) | 2022.01.14 |
[백준] 1244 스위치 켜고 끄기 (0) | 2022.01.14 |
[백준] 9012 - 괄호 (0) | 2022.01.14 |
[백준]1302 베스트셀러 (0) | 2022.01.08 |