프로그래머스에서 lv.0 가위바위보를 풀었다.
가위는 2 바위는 0 보는 5로 표현, rsp에 저장된 가위 바위 보를 모두 이기는 경우를 순서대로 나타낸 문자열을 return
그래서 나는 replace(0->5, 5->2, 2->0)을 하면 되겠다 싶어서
rsp.replace(/0/,"5").replace(/5/,"2").replace(/2/,"0");로 했으나
입력값이 "205"일때 기대값은 "052" 인데 "025"가 나왔다.. 대체 왜지?
저 replace에도 순서가 있나...? 혹시나 싶어 flag를 사용도 해봤다.
rsp.replace(/0/g,"5").replace(/5/g,"2").replace(/2/g,"0");
일케하니 결과는 "000"이 나왔다. 뭔가 문제가 있단 것만은 알겠다.
그래서 쳇gpt한테 물어봤다.
replace를 사용하여 항상 일관된 값을 도출하려면 문자열 치환 순서를 조정해야 합니다. 현재의 치환 순서는 2를 0으로, 0을 5로, 5를 2로 순서대로 치환하는 것입니다. 그래서 입력된 숫자의 순서에 따라 결과가 달라질 수 있습니다.
란다. replace는 코딩한 순서대로 변경하기 때문이란다. 그러면 순서를 보장하는건 뭘까 했더니 for문을 사용하거나 map을 사용하라고... 그렇구나...그래... 근데 프로그래머스에서 알려준 순서대로 코드를 고쳤는데 통과가 안됐다.
const mapping = {
'2': '0',
'0': '5',
'5': '2',
};
// var answer = rsp.split('').map(num => mapping[num]).join('');
var answer = '';
for (let i = 0; i < rsp.length; i++) {
answer += mapping[rsp[i]];
}
return answer;
map으로도 푸는 방법과 for문을 통해 푸는 방법으로 했다. 다른 분들 보니
이분은 내가 비구조화 할당을 잘 못해서 split을 쓰는데 비구조화를 써서 배열로 만든거 보고 아차! 해서 가져왔다.
split('').map(num => mapping[num]).join('');을 [...rsp].map~~으로 하셨다. 매번 잊지 말아야지 하는데 split이 너무 익숙하다 ㅎ 게다가 switch문을 사용해서 푼 사람의 것도 가져와 주셔서 오~~ 맞아 switch도 있었지 할 수 있어서 좋았다.
이 분은 for문을 쓰는데 chatAt을 쓰셔서 이렇게 쓸 수도 있구나를 알 수 있어서 좋은거 같아서 가져왔다. 오늘은 이 것들을 5번씩 손으로 써봐야지!
'자기개발 > TIL' 카테고리의 다른 글
수학 어렵네.. (0) | 2023.06.22 |
---|---|
내가 영어 면접을 보다니? (0) | 2023.06.21 |
두 개의 string을 합칠때 (0) | 2023.06.05 |
엔픽셀 인턴 코테 후기와 새싹톤 방향성 혼란 (0) | 2023.06.04 |
[java, springboot] int와 INTEGER의 차이 (0) | 2023.06.02 |