week_02_01

양쓰·2021년 12월 23일

2주차 동안 뭘 했나.

-알고리즘 공부
-파이썬으로 이용한 개인적인 프로젝트
(업다운게임,베스킨라빈스31게임,TextRpg)
**

하면서 뭘 배웠나?

알고리즘 공부는 제공해주는 강의를 통해서 하고 있다.
Linkedlist와 array,이진탐색(binary)를 공부했다.

Linkedlist와 array

linkedlist의 구조를 실생활을 예를들자면 한 운행열차가 운행을 준비중인데 맨 앞칸은 석탄 중간은 금 맨뒤에는 은이 있으면
중간에 구리를 석탄과 금사이에 넣는다면 연결고리를 때서 구리칸을 넣고 연결해서 넣고 거기에 연결고리를 다시 잇는다 대충 이런식으로 만들어 간다.보면 필요에 따라 원하는거에 따라 중간에 칸을 다시 집어 넣는데 이게 장점이다. 이걸 다시 생각해보면 linkedlist구조는 데이터 중간중간 넣는거도 가능하고 자유자재로 늘리는게 가능하다. 이러한 점이 장점이다. 반대로 array는 그게 불가능하다 뭔가 대충 짜여져있는 칸이다.라고 생각하면 될거 같다. 이건 내가 듣고 이해한 내용의 전부이다.

이진탐색은 반으로 나눠서 범위를 좁혀가면서 찾는거다.
업다운게임을 예시로 생각하면 이해하기 편하다. 그리고 이걸 이용해서 업다운게임을 파이썬으로 짜기도 하였다.

개인프로젝트

첫번째 업다운게임

녹색글씨가 나고 컴퓨터가 내가 생각한 숫자를 맞추는 게임이다.
숫자를 up down을 통해서 내가 생각한 맞추게끔 하려 구현한건 생각한 숫자가 말한 숫자보다 낮으면 down이니까 줄어든 범위에서 최대값은 말했던 숫자가 되겠구나 해서 그런식으로 while문과 if을 적절히 섞어서 만들었다. is_range는 범위이다. max와 min은 범위의 최대 최솟값..

```

while True:
is_range = int((max + min) // 2)
print(is_range)
answer = input("UP & DOWN?")
if (answer == "up"):
min = is_range

    elif (answer == "down"):
        max = is_range
    elif (answer == "정답"):
        print("정답이에여!!")
        break

파이썬으로 무언가를 처음 해보는거고 턴을 왔다갔다 하면서 구현을 해야하는데 이 부분이 처음에 잘 몰라서 고민을 많이 했다.

베스킨라빈스 31 게임 만들기

베스킨라빈스 31 컴퓨터가 99프로는 이기게 만들기를 했다.
난 아싸라 잘 모르지만 이 게임에 필승법이 있다는건 처음 알았다.

그렇단다 저 숫자들중에 하나만 부르면서 나와 상대방이 부르는 값이 4가 되게 만들어서 30을 선점하게끔 만들수 있다는거다.
나 : 1
너 : 2,3,4

나 : 5,6
너 : 7,8

나 : 9 10 11
너 : 12

......

너 : 28 29 30
나 : 31

----- 나의 패배 -----

이런식으로 만들면 되는것다 이게 어떻게 하든 이런식으로 내가 31을 부르게끔 만들게 되면 된다. 이런거다.

else:
print("COM의 차례")
if num % 4 == 0:
size_of_call_com = 2
elif num % 4 == 1:
size_of_call_com = 1
elif num % 4 == 3:
size_of_call_com = 3
else:
size_of_call_com = random.randint(1,3)

솔직히 이 부분에 대한 작동을 어떻게 코드로 구현하고 짜야할지를 몰랐다. 그래서 구글링을 해서 찾아보고 참고해서 만든게 이것이다. 로직은 4의 배수를 말하게끔 해서 30을 먹으면 이긴다가 핵심이였던거 같다.
30 - 4 =26, 30-8 = 22, 30- 12 = 18 이런식으로 위에 나온 숫자들을 선점하고 4에 배수에 맞게 숫자를 부르면 상대가 모르면 무조건 이기게 되는것이니 이런식으로 짜게 되면 올바르게 구동이 된다.

결과는 이러하다.

profile
VAR같은건 없어져야해!

0개의 댓글