본문 바로가기

python/백준_프로그래머스

[백준 1100번] 하얀 칸 python과 eval 함수

728x90

https://www.acmicpc.net/problem/1100

 

1100번: 하얀 칸

체스판은 8×8크기이고, 검정 칸과 하얀 칸이 번갈아가면서 색칠되어 있다. 가장 왼쪽 위칸 (0,0)은 하얀색이다. 체스판의 상태가 주어졌을 때, 하얀 칸 위에 말이 몇 개 있는지 출력하는 프로그램

www.acmicpc.net

 

<조건>

 

<알고리즘>

 2차원 리스트로 입력받아서 인덱스가 짝수일 때는 짝수칸 위에 F가 올라간 경우, 인덱스가 홀수 일 때는 홀수 칸 위에 F가 올라간 경우를 샌다.

 

<코드>

#입력
chess_board=[]
for i in range(8):
  b=input()
  board=[]
  for i in b:  #문자열 토큰화
    board.append(i)
  chess_board.append(board)

#연산
count=0
for i in range(8):
  if i%2==0: #인덱스가 짝수일 때
    for j in range(8):
      if j%2==0 and chess_board[i][j]=='F':
        count+=1
  else:
    for j in range(8):
      if j%2!=0 and chess_board[i][j]=='F':
        count+=1

#출력
print(count)

 


 이번 문제는 입력이 굉장히 귀찮은 문제였다. 그래서 처음에 그냥 2개로 놓고 풀었다가 잘못되었다는 걸 뒤늦게 깨달았다. 

 

이게 무슨 사진일까요?

 2차원 리스트를 사용하여 list[i][j]가 있을 때 출력 순서 = i, list[i][j], j이다. 무슨 문제인지 알아보시겠나요? 음~~

코딩 망한 사진!

 바로 j의 출력이 이상하다. 인덱스가 8x8이라서 맨 끝 출력이 0101이 아니라 012..7까지 나와야되는데 0101만 나오는 것! 후후.. 이상하다는 걸 알아차리지 못하고 프린트 해보니까 14줄이 문제였다. 

 

너는 웬만하면 코딩하지마라 보는 사람 속터지니까

 


<eval 함수>

 

 이번에도 문제풀고 백준 내 풀이를 봤는데 내가 20줄(주석제외)로 푼 걸 한줄만에 푸는 낫닝겐 분들이 계셨다. 어우.. 보니까 eval 함수를 많이 쓰셨는데 eval? E발? 이발? 

 

 그래서 알아보는 이발 함수~

 

https://docs.python.org/ko/3/library/functions.html#eval

 

내장 함수 — Python 3.10.2 문서

내장 함수 파이썬 인터프리터에는 항상 사용할 수 있는 많은 함수와 형이 내장되어 있습니다. 여기에서 알파벳 순으로 나열합니다. abs(x) 숫자의 절댓값을 돌려줍니다. 인자는 정수, 실수 또는 __

docs.python.org

 

 

음~ 뭐라는 거야~ 이럴 땐 역시 구글링!

 

 이발 함수는 문자열로 식을 받아서 실행하는 함수다. 요런 식으로. 

이발 함수 예시

 

 사실 그동안 문제를 풀면서 여러 줄로 입력받아야 하는 값을 한줄의 코드로 해결할 순 없을까하는 고민을 했다. 이번 문제를 풀면서 그 고민을 했고 낫닝겐님들의 코드를 보고 해결했다.. 

 

 

 비교 예시가 그리 적절하진 않지만, for문을 쓰지 않아도 입력받을 수 있다는 걸 알아냈다! 다만, eval()함수가 컴퓨터 보안 상에는 위험하여 사용하지 않는 것이 좋다고 한다. 

 


오늘의 백준 끗~