알고리즘 풀이

[algorithm] 프로그래머스: 가위바위보

째깍단 2023. 4. 10. 14:20

답: 

더보기
def solution(rsp):
    r_list = list(map(int, rsp))
    answer = ''
    a = ''
    for r in r_list:
        if r == 2:
            a = '0'
        elif r == 0:
            a = '5'
        elif r == 5:
            a = '2'
        answer += a
    return answer

 

 

문제를 잘못 읽은 1차 풀이..

더보기

문제 분석 및 해석

가위 2 바위 0 보 5를 내는 순서대로 나타낸 문자열 rsp

rsp = [2, 0, 5]

2순서는 상관 없이 이런식으로 가위바위보가 든 배열이 주어질 것임

 

rsp를 모두 이기는 경우를 순서대로 나타내는 문자열 출력

2 -> 0 

0 -> 5

5 -> 2

로 list 배열을 바꾸어주어야한다

 

 

> 어떤 방법으로 list를 조작할 수 있을까?

 

for문과.. If append

list자리값에 대치해주기... 등등

 

for문으로 전체 리스트를 돌려 각 값을 바꾸어주는 방법으로 go!

 

 

 

과정1.

 

빈 answer 리스트에 for문과 append로 값을 추가해주는 방법을 선택했다.

def solution(rsp):
    answer = []

    for r in rsp:
        if r == 2:
            a = 0
            return a
        elif r == 0:
            a = 5
            return a
        elif r == 5:
            a = 2
            return a
        answer.append(a)
    #print(answer)
    return answer

rsp = [2, 0, 5]

결과 : [2]    하나만 나옴

 

결과를 받고 왜그런가 곰곰히 생각해봤는데 return 때문이다.

for문안에 return이나 print값을 줘버리면 for문이 출력 시점에서 멈춰버리기 때문에 값이 1개 들어있는 리스트가 리턴된 것.

 

 

 

 

과정2.

그러니 return을 빼주었다.

    for r in rsp:
        if r == 2:
            a = 0
        elif r == 0:
            a = 5
        elif r == 5:
            a = 2

하지만 계속되는 오류...

>> 입력값은 문자열 출력값도 문자열이라는 것을 빼먹은것

이걸 깨닫고 다시 풀기로 했다... 바보

 

 

 

 

2차 풀이

문제 분석 및 해석

 

입력 : rsp "205"  << 문자열!!!!

 

split()은 구분자가 있어야하니까 불가능

list() : 문자열을 한 글자씩 분리하여 리스트에 저장

하여 

 

각 문자열을 적절한 숫자로 전환하고

 

다시 합쳐진 문자열""로 만들어 반환해야한다

 

 

 

과정1.

def solution(rsp):
    rsp = list(rsp)

list() 를 사용해 문자열을 rsp라는 list의 요소로 만든다 #이때 문자열인 요소임

 

 

for r in rsp:
        int(r)

 

for문안에 넣고 int로 바꾸어준다음 if문으로 바꾸어야하는 숫자로 치환한다

2 -> 0

0 -> 5

5 -> 2

 

 

그리고 바꾼 a를 answer리스트에 더해주는데,

묶인 문자열로 반환하는 join()를 사용하기위해 str으로 만들어 넣어준다.

 

    answer.append(str(a))
print(''.join(answer))

 

결과값을 보기위해 print로 적어두었는데 print를 사용하면 함수를 써도 소용이 없다.

해당 줄에서 결과 뱉고 끝나니까 꼭 반환으로 바꾸어준다!

 

 

 

시도1.

문제가 있다 모든 결과값이 0으로 나온다

 

for r in rsp:
	a = 0
    if r == 2:
	...
        a = 2
        print(a)

여기서 프린트를 해보니 000으로 신나게 나오고있다

그렇다는건 if문들이 전혀 동작을 안하고 있다는 것인데...

 

아하 type(r)을 출력해보니 <class str>, 전혀 정수로 변환되고 있지 않았다.

그리고 for문안에서 요소를 변환시키는 것은 어떻게 동작할 지 알 수 없어서 비추라고한다

map함수로 rsp를 미리 int로 변경해주고, r = int(r) 로 변수를 재할당해주었다

 

r_list = list(map(int, rsp))

 

 

     =====

 

그리고 끙끙대는거 max시간이 지났으므로 아쉽지만 힌트를 얻도록하자..

 

!!

!!!

 

리스트로 다시 넣어서 풀 필요 없이

문자열끼리 더하는 방법으로 깔끔하게 출력할 수 있었다..!

answer = ''

a = '' 를 넣고,

 

for r in r_list:
    ...
    answer += a
return answer

 

됴르륵..

 

 

 


느낀점: 

 

문제를 좀 자세히 읽었으면 좋겠다.....

오랜만에 문제를 풀려니 머리가 안돌아가려고 애쓰는것 같다^^;

입력, 출력값을 자세히 살피는 습관을 들이자

 

 

그리고 오류가 생겼을때 이건가? 하면서 하나씩 뚝딱뚝딱 고쳐보는 습관같은 것이 있는데,

아직 그렇게 실력이 좋지 않은 관계로 코드를 아예 망치는 길로 빠지는 경우가 잦다.

 

그러니까 원 코드는 그대로 내버려두고,

1) 머리 속으로 어떤 것이 문제일지

 -> 부분부분에서 어떤 값이 나오고있는지 출력값 보기

2) 어떤 방법으로 고쳐야할지 생각하기

의 단계를 꼭 거치도록하자!

 

 

 

return과 print를 공부해서 개념자체를 머리에 박아넣어야겠다.

자꾸 초보적인 실수가 나오는 이유는 기초가 없기때문이므로..

좋은 개발자가 되기 위해 바탕을 잘 만들어야지.