컴퓨터 공부/📚 Baekjoon(백준)

[백준/알고리즘/python/java] 13698번 - Hawk eyes

letzgorats 2021. 6. 23. 23:24

이미지를 누르면 문제링크를 보실 수 있습니다.
이미지를 누르면 문제링크를 보실 수 있습니다.

기말고사가 끝나고 다시 백준문제를 풀어봤다.

이 문제의 로직은 간단했다. 그냥 사용자에게 섞는 순서를 가리키는 알파벳을 입력받고, 

해당 알파벳마다 섞는 방법이 다르기 때문에 방법에 따라 그냥 위치만 바꿔주면 됐다.

흔히들 swap할 때는, temp라는 변수를 정해서 원소를 뒤바꾸는데, 파이썬이어서 좋은 점은 temp라는 변수를 따로 안 정하고, 그냥 배열 원소를 서로 바꿀 수 있다는 점이었다.

 

처음엔, 틀렸었다. 맨 처음 틀린 코드는 아래와 같다.

import sys
input = sys.stdin.readline

order_list = input()
ball_position = [1, 0, 0, 1]

for alpha in order_list:
    if(alpha == 'A'):
        ball_position[0], ball_position[1] = ball_position[1], ball_position[0]
    elif(alpha == 'B'):
        ball_position[0], ball_position[2] = ball_position[2], ball_position[0]
    elif(alpha == 'C'):
        ball_position[0], ball_position[3] = ball_position[3], ball_position[0]
    elif(alpha == 'D'):
        ball_position[1], ball_position[2] = ball_position[2], ball_position[1]
    elif(alpha == 'E'):
        ball_position[1], ball_position[3] = ball_position[3], ball_position[1]
    elif(alpha == 'F'):
        ball_position[2], ball_position[3] = ball_position[3], ball_position[2]

for i in range(len(ball_position)):
    if(ball_position[i] == 1):
        print(i+1)

order_list라는 변수로 섞는 방법을 입력받은 다음, 그에 따라 원소를 바꾸는데, 
굳이, 또 다시 for문을 통해서 원소값이 1인 자리를 찾을 필요는 없었다.

차라리, 초기 배열값을 [1,2,3,4]로 두고 index() 내장 함수를 통해서, 그냥 1과 4의 위치가 
어디에 있는지만 출력하면 됐다.

그리고, 가장 결정적인 실수가, 문제에서 작은공의 위치를 출력하고, 큰 공의 위치를 출력하라고 했는데, 나는 단순히 작은공과 큰공의 위치를 둘 다 1 로 설정해서, 큰 공의 위치가 먼저 출력되는 오류가 나올 수도 있는 코드였다.

작은공과 큰공의 위치도 구분해야 하는 것을 놓쳤다.

 

수정한 코드는 아래와 같다.

import sys
input = sys.stdin.readline

order_list = input()
ball_position = [1, 2, 3, 4]

for alpha in order_list:
    if(alpha == 'A'):
        ball_position[0], ball_position[1] = ball_position[1], ball_position[0]
    elif(alpha == 'B'):
        ball_position[0], ball_position[2] = ball_position[2], ball_position[0]
    elif(alpha == 'C'):
        ball_position[0], ball_position[3] = ball_position[3], ball_position[0]
    elif(alpha == 'D'):
        ball_position[1], ball_position[2] = ball_position[2], ball_position[1]
    elif(alpha == 'E'):
        ball_position[1], ball_position[3] = ball_position[3], ball_position[1]
    elif(alpha == 'F'):
        ball_position[2], ball_position[3] = ball_position[3], ball_position[2]

print(ball_position.index(1)+1)
print(ball_position.index(4)+1)

 

반응형