난이도 : D5
문제번호 : 1259
문제 주소 및 출처입니다.
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
목차
1. 문제 설명
2. 문제 해석
3. 소스 코드
1. 문제 설명
원형 금속 막대를 가장 길게 연결하고자 한다. 원형 금속 막대는 한 쪽 면에 수나사와 다른 쪽에 암나사로 이루어져 있다. 수나사와 암나사는 굵기가 서로 다르다. 아래 그림에서 수나사의 굵기는 3을 암나사의 굵기는 4를 나타내고 있다. 이후 나사의 굵기를 수나사의 굵기 x 암나사의 굵기로 표현한다. 연결은 +로 표현한다. 이와 같은 원형 금속 막대를 연결하기 위해서는 수나사의 굵기와 암나사의 굵기가 서로 일치해야 한다. 예를 들어 두 개의 원형 금속 막대 3x4와 4x5가 있을 때 3x4+4x5로 연결해야 연결되며 4x5+3x4로 연결하면 연결되지 않는다. 수나사와 암나사의 크기가 서로 다른 여러 개의 원형 금속 막대를 가장 많이 연결하려고 한다. 어떤 순서로 연결해야 가장 많이 연결하는지를 찾는 프로그램을 작성하시오. |
맨 첫 줄에는 테스트 케이스의 개수가 주어진다. |
출력
각 테스트 케이스 각각에 대한 답을 출력한다. |
예시
입력 | 출력 |
10 3 3 4 2 3 4 5 4 1 2 5 1 2 4 4 3 … |
#1 2 3 3 4 4 5 #2 5 1 1 2 2 4 4 3 … |
2. 문제풀이
오래전에 풀었던 문제라 코드가 마음에 들지 않지만... |
3. 소스코드
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
|
#D5 1259 금속막대
#반복횟수만큼 입력받고 반복
T = int(input())
for t in range(1, T+1):
abc = input()
#입력받고 공백을 기준으로 분리
lst =list(map(int, input().split()))
temp = []
result = []
#숫나사, 암나사 가 한묶음이므로 2개씩 끊어서 넣는다.
for i in range(0, len(lst), 2):
temp.append((lst[i], lst[i+1]))
#결과창에 제일앞내용을 넣는다.
result.append(temp.pop(0))
#인덱스 추적을 위한 변수 i
i = 0
#temp의 길이가 0이 될때까지 반복한다.
while len(temp):
#앞에 연결할수있다면 결과에 추가하고 인덱스 초기화
if temp[i][1] == result[0][0]:
result.insert(0, temp.pop(i))
i = 0
#뒤에 연결할 수 있다면 추가하고 인덱스 초기화
elif temp[i][0] == result[len(result)-1][1]:
result.append(temp.pop(i))
i = 0
#아무것도 연결못한다면 다음것을 확인
else:
i += 1
#출력하기
print("#{}".format(t), end='')
for r in result:
print(' ', end='')
print(*r, end = '')
print()
|
'코딩테스트 > SWExpertAcademy' 카테고리의 다른 글
Ladder2 Python(SW Expert Academy, SWEA) (0) | 2020.06.06 |
---|---|
Ladder1 Python(SW Expert Academy, SWEA) (0) | 2020.06.05 |
공통조상(SW Expert Academy, SWEA) (0) | 2020.06.03 |
최적경로 Python(SW Expert Academy, SWEA) (2) | 2020.06.02 |
작업순서 Python(SW Expert Academy, SWEA) (0) | 2020.06.01 |
댓글