[algorithm] 프로그래머스: 가위바위보
답:
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를 공부해서 개념자체를 머리에 박아넣어야겠다.
자꾸 초보적인 실수가 나오는 이유는 기초가 없기때문이므로..
좋은 개발자가 되기 위해 바탕을 잘 만들어야지.