Kim Seon Deok

[백준] 2659 십자카드 본문

python/Algorithm

[백준] 2659 십자카드

seondeok 2022. 1. 14. 18:44

https://www.acmicpc.net/problem/2659

 

2659번: 십자카드 문제

입력은 한 줄로 이루어지며, 이 한 줄은 카드의 네 모서리에 씌여있는 1 이상 9 이하의 숫자 4개가 시계 방향으로 입력된다. 각 숫자 사이에는 빈칸이 하나 있다.

www.acmicpc.net

<시계수를 찾는 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
= 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
        
 
= 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 
 
 
= 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
Comments