본문 바로가기
공부/Python

[Python] 파이썬 문제풀기

by 병진들 2017. 10. 19.

[Python] 파이썬 문제풀기


파이썬을 공부하고 있던중에.. 아는 건축학과 다니시는 형님이 학부과제를 하나 부탁하셨다..

어떤 언어로 짜도 상관없다고 하셔서 파이썬 공부도 할 겸 짜본 코드.



문제(과제를 누가 검색할 수 있으므로 이름은 바꿈..)

진주를 잡아라

- 10 x 10의 공간, 임의이 자리에 진주와 병진이 위치 지정

- 진주: 1칸 랜덤

- 병진: 진주가 있는 방향의 최단거리. 3턴을 2,1,0 칸씩 움직일 수 있음 (반복)


1) 진주가 병진이를 잡는데 걸리는 횟수 산정

2) Simulation 수행 및 보여주기



C에 익숙했던 난 당연히 이차원배열을 생각했고, 금방할 줄 알았는데 파이썬이라 생각보다 오래걸렸다...ㅠㅠ

 막상 다 짜놓고 보니 파이썬이 조금 더 쉬웠던거 같긴하다.



정답(이라고 할 순 없지만 어거지로 짠 코드)

# 모듈은 최대한 사용하지않았음.. 사용할것도 없엇지만,

import random

import time

import os


# 지형 만들기 

def ground(rabbit_loc, wolf_loc,num):

    a=[0,10,20,30,40,50,60,70,80,90]

    b=[0,1,2,3,4,5,6,7,8,9]

    print ("=========%d 번째 Turn==========" % num)

    for x in range(0,10): 

        for y in range(0,10):

            map = a[x] + b[y]

            if map == wolf_loc:

                print('^<',end="  ") #늑대

                

            elif map == rabbit_loc:

                print('@',end="  ")  #토끼

                

            else:

                print('*', end="  ") # Map

        print(' ')

        

    time.sleep(2)

    os.system('cls') #콘솔창 clear

    

    

# 토끼 random 으로 1칸 움직임

def rabbit_move(rabbit_loc):

    forward = random.randrange(0,4)

    

    # 오른쪽 한칸

    if forward == 0:

        current_loc = rabbit_loc + 1

        # Map 밖으로 벗어나지 않도록 설정 / 현재 오른쪽 끝에서 왼쪽 끝으로 가는것도 방지

        if current_loc > 100 or (current_loc % 10 == 10):

            rabbit_move(rabbit_loc)

        else:

            return current_loc

        

    # 왼쪽 한칸

    elif forward == 1:

        current_loc = rabbit_loc - 1

        if current_loc < 0 or (current_loc % 10 == 9) : # 왼쪽 끝에서 오른쪽 끝으로 가는것 방지

            rabbit_move(rabbit_loc)

        else:

            return current_loc

        

    # 아래로 한칸

    elif forward == 2:

        current_loc = rabbit_loc + 10

        if current_loc > 100:

            rabbit_move(rabbit_loc)

        else:

            return current_loc

    

    #위로 한칸

    elif forward == 3:

        current_loc = rabbit_loc - 10

        if current_loc < 0:

            rabbit_move(rabbit_loc)

        else:

            return current_loc

        

    elif forward == 4:

        return rabbit_loc

    

# 토끼한테 가는 늑대 움직임 ( 행 먼저 맞추고 열 맞춤)

def wolf_move(wolf_loc, rabbit_loc):

    wolf_1 = int(wolf_loc % 10)

    wolf_10 = int(wolf_loc / 10)

    rabbit_1 = int(rabbit_loc % 10)

    rabbit_10 = int(rabbit_loc / 10)

    

    if (rabbit_10 > wolf_10):

        wolf_loc = wolf_loc + 10

        return wolf_loc

    elif (rabbit_10 < wolf_10):

        wolf_loc = wolf_loc - 10

        return wolf_loc

    elif( rabbit_10 == wolf_10 ):

        if (rabbit_1 > wolf_1):

            wolf_loc = wolf_loc + 1

            return wolf_loc

        elif (rabbit_1 < wolf_1):

            wolf_loc = wolf_loc - 1

            return wolf_loc

        else:

            return wolf_loc


# 동작 함수

def simulate():

    num = 0

    rabbit_loc = random.randrange(0,100)

    wolf_loc = random.randrange(0,100)

    print("Start!")

    print(rabbit_loc, wolf_loc)

    while(1):

        if rabbit_loc == wolf_loc :

            print("finish!")

            break

        else:

            ground(rabbit_loc, wolf_loc, num)

            for i in range(0,3):

                if(i == 0): 

                    num = num + 1

                    rabbit_loc = rabbit_move(rabbit_loc)

                    ground(rabbit_loc, wolf_loc, num)

                elif(i==1):

                    num = num + 1

                    rabbit_loc =rabbit_move(rabbit_loc)

                    wolf_loc = wolf_move(wolf_loc, rabbit_loc)

                    ground(rabbit_loc, wolf_loc, num)

                else:

                    num = num + 1

                    rabbit_loc =rabbit_move(rabbit_loc)

                    wolf_loc = wolf_move(wolf_loc, rabbit_loc)

                    wolf_loc = wolf_move(wolf_loc, rabbit_loc)

                    ground(rabbit_loc, wolf_loc, num)



##### 실행 ! #####
simulate()



실행 결과

주피터노트북으로 코딩해서 콘솔이 안날아갔지만 실제 콘솔로 돌리면 깔끔할듯 싶다..






댓글