Photo by Pietro Mattia on Unsplash
코드업 마지막 문제를 풀었다. 솔직히 내 코드가 조금 부끄러워서 공개하고 싶지 않지만 앞으로 코드를 어떤식으로 개선하는지 기록하는 것도 나에게 도움이 될 것 같다.
처음엔 다음과 같은 의사코딩으로 먼저 접근해보았다.
미로는 10 * 10의 이차원 배열이다.
개미의 시작점은 [1,1]이다.
더이상 움직이지 못하거나 먹이를 찾은경우 그곳에 머무른다.
개미는 오른쪽을 '우선'으로 한칸씩 움직인다.
오른쪽이 벽에 막혀있다면 아래쪽으로 움직인다.
그리고 그걸 그대로 코드로 옮겨 실행했고 아래와 같은 코드로 작성하였다.
maze = []
for i in range(10):
maze.append(list(map(int, input().split())))
cur_p = [1,1]
while True:
if maze[cur_p[0]][cur_p[1]] == 2:
maze[cur_p[0]][cur_p[1]] = 9
break
maze[cur_p[0]][cur_p[1]] = 9
if maze[cur_p[0]][cur_p[1]+1] == 0 or maze[cur_p[0]][cur_p[1]+1] == 2:
cur_p[1]+=1
else:
if maze[cur_p[0]+1][cur_p[1]] == 1:
break
else:
cur_p[0]+=1
for i in range(10):
print(' '.join(map(str, maze[i])))
다음 이동할 지점인 next_pos를 만들어서 확인하고 while문을 break하는게 더 효율적이었을까 하는 생각이 든다.
정수들의 절대값이 담긴 배열 absolutes 와 음수인지 양수인지 boolean값으로 표시한 signs를 받아 실제값의 합을 구하는 문제다.
파이썬의 반복문을 사용하면 비교적 쉽게 풀 수 있는 문제기에 딱히 의사코딩이나 조건에 대한 생각없이 편하게 풀 수 있었다.
아래는 먼저 시도해본 코드이다.
def solution(absolutes, signs):
answer = 0
for idx, sign in enumerate(signs):
if sign:
answer += absolutes[idx]
else:
answer -= absolutes[idx]
return answer
이 코드를 보고 삼항연산자로 한줄코드를 할 수 있지 않을까 생각해서 줄여본 코드 제출해보니 잘 동작해서 통과가 되었다.
def solution(absolutes, signs):
answer = [absolute if signs[idx] else -1 * absolute for idx, absolute in enumerate(absolutes)]
return sum(answer)