For Programmer

SWEA 1220 파이썬 문제풀이(Magnetic) 본문

코팅테스트/백준 문제 모음

SWEA 1220 파이썬 문제풀이(Magnetic)

유지광이 2022. 2. 6. 23:42
728x90

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14hwZqABsCFAYD 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 


이 문제는 약간 생각해야될 문제이다. 우선 2차원 리스트를 세로로 돌면서(행으로) 1 혹은 2인 것만 리스트에 새로 담았다. 그 후 양쪽 끝에서 안쪽으로 오면서 1, 2 있는것들을(즉, 테이블 밖으로 빠지는 것들은) 0으로 지워주었고 그 후 다시 리스트를 돌면서 교착상태의 개수를 구했다.  

for order in range(1, 10 + 1):

    length = int(input())
    array = []
    for _ in range(100):
        array.append(list(map(int, input().split())))

    count = 0  # 결과를 출력할 변수
    for i in range(100):
        temp = []  # 자석들을 담을 리스트
        for j in range(100):
            if array[j][i] != 0:  # 만약 0이 아니라면(자석이 있다면)
                temp.append(array[j][i])  # 그 자석들을 임시리스트에 넣어준다.

        for left in range(len(temp)):  # 왼쪽부터 돌면서 2자석은 다 0으로 바꿔준다.
            if temp[left] == 2:
                temp[left] = 0
            else:  # 단 1을 만나면 종료
                break

        for right in range(len(temp) - 1, -1, -1):  # 오른쪽부터 돌면서 1자석은 다 0으로 바꿔준다.
            if temp[right] == 1:
                temp[right] = 0
            else:  # 단 2를 만나면 종료
                break
        gyochak = []  # 교착상태를 담을 임시 리스트선언
        for k in range(len(temp)):  # 자석개수를 돈다.
            if temp[k] != 0:  # 만약 0이 아니라면(앞뒤로 테이블밑으로빠진 자석들은 무시)
                if k != len(temp) - 1 and temp[k] != temp[k + 1]:  # 만약 마지막 인덱스가 아니고 두개의 리스트원소가 다르다면
                    gyochak.append(temp[k])
                if k == len(temp) - 1:  # 마지막 인덱스 이면서 0이 아니라면 무조건 담아준다.
                    gyochak.append(temp[k])
            if len(gyochak) == 2:  # 만약 2개가 담겼다면(1,2) 교착상태이므로
                count += 1  # 개수를 1개 추가해준다.
                gyochak = []  # 그 후 다시 리스트를 비워준다.
    print(f'#{order} {count}')
728x90
Comments