티스토리 뷰
코딩 테스트/SW Expert Academy
[SW Expert Academy] 1225. [S/W 문제해결 기본] 7일차 - 암호생성기 파이썬 정답 코드
leego 2023. 5. 5. 02:16SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
1. 문제 내용
2. 접근 방식
사이클을 한 번 돌리고, 마지막 원소 값이 0인지 확인하는 것이 큰 틀이다.
사이클은 temp 리스트를 생성하여 for문을 돌리는 방식으로 처리한다. 그 이유는 아래와 같다.
li = [1, 2, 3, 4]
for e in li :
li.append(e)
if len(li) == 10 : break
print(li) # 결과: [1, 2, 3, 4, 1, 2, 3, 4, 1, 2]
만약 li 라는 리스트에, 다시 1, 2, 3, 4를 집어 넣고 싶다고 가정한다. 위 코드의 문제점은 li 리스트로 반복문을 돌리면서 li 리스트에 원소를 추가하고 있다. 따라서 원소가 끝날 때까지 for문을 돌아야 하는데, 원소가 끊임없이 추가되므로 해당 for문은 무한 루프에 빠지게 된다. 이를 방지하기 위해선 아래 코드처럼 temp 리스트를 사용해야 한다.
li = [1, 2, 3, 4]
temp = [ ]
for e in li :
temp.append(e)
li.extend(temp)
print(li) # 결과: [1, 2, 3, 4, 1, 2, 3, 4]
이것 때문에 예전에 애를 먹은 적이 있기 때문에 이번에는 이를 미리 명심하고 사이클을 구현하였다.
첫 번째부터 다섯 번째 원소 값에 각각 1, 2, 3, 4, 5를 뺀 값을 temp 리스트에 담고, for문이 끝나면 기존 데이터 리스트에 추가한다. 사이클을 돌기 전 값을 제거하기 위해선 리스트 인덱싱을 사용한다.
3. 정답 코드
def cycle(data) :
d = 1
temp = []
for n in data[0:5] :
if n - d <= 0 :
temp.append(0)
break
temp.append(n-d)
d += 1
data.extend(temp)
return data[ len(temp) : ]
def print_answer(i, data) :
print(f'#{i}', end= ' ')
for n in data :
print(n, end=' ')
print()
for i in range(10) :
case = int(input())
data = list(map(int, input().split()))
while data[7] != 0 :
data = cycle(data)
print_answer(case, data)
728x90
'코딩 테스트 > SW Expert Academy' 카테고리의 다른 글
[SW Expert Academy] 1230. [S/W 문제해결 기본] 8일차 - 암호문3 파이썬 정답 코드 (0) | 2023.05.08 |
---|---|
[SW Expert Academy] 1220. [S/W 문제해결 기본] 5일차 - Magnetic 파이썬 정답 코드 (0) | 2023.05.05 |
[SW Expert Academy] 1289. 원재의 메모리 복구하기 파이썬 정답 코드 (0) | 2023.05.05 |
[SW Expert Academy] 1215. [S/W 문제해결 기본] 3일차 - 회문1 파이썬 정답 코드 (0) | 2023.05.04 |
[SW Expert Academy] 1926. 간단한 369게임 파이썬 정답 코드 (2) | 2023.05.04 |