TIL 2023.05.23

jomok·2023년 5월 23일
0
post-thumbnail

오늘 공부 계획 및 공부한 내용📝

  • 자바스크립트 1-2주차 강의 복습! 🔺2주차 못함
  • 3주차 강의 듣기 🔺3강 남음
  • 코딩테스트 다시 도전 🔥3개 중에 하나 해결....
  • 특강(강민철 튜터님) ㅇ

문제🧐 / 해결과정⚒️

1) 코딩테스트 첫번째 문제

대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.
예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.


<제한사항>

  • 문자열 s의 길이 : 50 이하의 자연수
  • 문자열 s는 알파벳으로만 이루어져 있습니다.

🤔--> 문제의 "pPoooyY"과 "Pyy"에서 가장 거슬렸던 저 알파벳 o친구
저걸 먼저 지워버리고 일단 시작하기로 결정!
저거 지우고 대소문자p와 대소문자y의 합이 짝수면 true / 홀수면 false로 도출해보자! 라고 생각함.

문제1🔺 알파벳 o를 지우지 않아도 대소문자py의 개수를 세는 것에도 아무 영향 없음
문제2🔺 만약 각 문자열이 py를 더 많이 포함하는 문자열이었다면 대소문자p와 대소문자y의 합이 짝수더라도 2개, 4개 이런 식으로 있어버리면 각 문자의 개수가 같음을 증명할 수 없게됨.. 그리고 어차피 개수를 비교해야 하는 건데 굳이 합까지 구해 비교할 필요는 없음..(이것을 일 만들기)

해결📌 알파벳 o 지우는 방법(사실 필요 없는 과정)
ex) s = s.replace('o','')
---> 이렇게 하면 제일 처음 나온 'o'만 쏙 빠진다.
그냥 replace 하지 말고 replaceAll을 써줘야 모든 o가 빠짐.
어디서 많이 본 strip()을 사용해보려 애를 썼는데 알고보니 이건 파이썬에서 사용하는 것이었다....

해결📌 그냥 합이 짝수/홀수임을 비교하지 않고 바로 대소문자py의 개수를 비교해 같은지, 틀린지 보기로함.

논리합(||) 연산자(일명or)을 추가해 p 소문자와 대문자 중 아무거나 걸리면 pnum=0부터 1씩 증가시키기, 같은 방식으로 y도 1씩 증가시키기

그 결과값이 나중에 같으면(pnum===ynum) true, 틀리면 false!

여기서 고민,
pnum.length === ynum.length를 써도 되지 않을까
--> 아무리 해도 원하는 결과가 안나옴 ㅎ 애초에 length는 배열의 길이를 구하는 것인데 pnum 해봤자 숫자 딱 하나 나온다.. 배열도 아님.

또 고민,

return pnum === ynum

이거 아래에 이 값이 같지 않을 경우도 있으니

return pnum !== ynum

문장을 추가해야 되지 않을까 했지만
return pnum===ynum; 는 불리언값으로 도출이 되니까
pnum ynum 값을 그때그때 비교해서 같으면 투루, 다르면 폴스가 나오기에
굳히 한줄 더 쓸 필요가 없다는 걸 알려주셨다(튜터님짱).. 실제로 해보니 없어도 false값이 잘 나왔다.

return pnum === ynum 대신 return pnum !== ynum 를 넣어도 여전히 문제 없이 답 순서만 바껴서 나왔다.

ture, false 값을 내려면 무조건 앞에 console이나 불리언이 붙어야 한다고 생각했는데 저 자체로도 불리언 결과가 나오는 것이었다!

또 고민,
어쨌든 대소문자py의 숫자를 비교하는 것이 핵심인데
for구문 없이 if구문으로 숫자가 같으면 트루, 아니면 폴스! 이런 초간단 방법은 없을까. 마치 i++ 하면 알아서 숫자가 하나씩 증가하는 것처럼..
그냥 무슨 단어 하나 추가하면 그 숫자 갯수를 바로 알 수 있는..고런 매직?


느낀점✨

  • 저 문제 하나 푸는데 거의 4시간이 걸렸다..
    사실 문제는 이해됐는데(다른 문제는 이해도 못함ㅎ) 이걸 어떻게 풀어야지~했지만 그 생각한 방법을 코드로 쓰지를 못했다 ㅠㅠ 팀프로젝트 하면서 더 어렵고 복잡한 코드도 봤는데 코드를 이해하는 것과 쓰는 것은 또 다른 문제인 건가... (사실 그 이해가 이해가 아닐 수도 있지만,,)

0개의 댓글