[2주차] 알고리즘 특강 2차시 문제와 풀이 톺아보기

voyager 999·2024년 1월 5일

JavaScript

목록 보기
11/19

알고리즘 두번째시간.......


문자열 갯수 세기

Q. 문자열 내에서 각 문자가 몇 번 등장하는지 세는 프로그램을 작성하세요. 
     예를 들어, 문자열 'spartan'이 주어지면, 결과는 다음과 같아야 합니다
     
     { s: 1, p: 1, a: 2, r: 1, t: 1, n: 1 }”

<1. 처음 써본 것>
마지막에 배열 형태로 반환해야 하고, 문자의 갯수를 세어 담아 둘 변수가 필요해서 각각 obj, num으로 선언했다. 이런이런🤷🏻‍♀️혹시 한 번에 실행돼버리는 거 아닐까~~? 후후후 하고 희망회로를 돌려봤지만 역시 되지 않았다 😇🔫


<2. 튜터님 모범답안 보고 고쳐보기>
처음 보는 게 나왔다. obj[key] = value를 통해 객체에 key-value pair를 추가할 수 있는데, 문자열 'spartan'의 각 글자 하나하나가 객체의 key가 되고, 글자의 갯수가 해당 key의 value가 될 것이다.
객체에 문자열 'spartan'의 첫번째 글자인 s를 key로 갖는 요소가 이미 있다면 해당 key의 value 값을 1 올려주고, 없다면 새로 만들어 주고 초깃값을 1로 설정하는 식이다.
이건 앞으로도 많이 쓰이는 기초 표현일 것 같아서 언제든 떠올리고 활용할 수 있도록 꼭 익혀야겠다.


문자열 뒤집기

Q. 주어진 문자열을 뒤집어서 반환하는 함수 작성하기
  예를 들어, 문자열 'spartan'이 주어지면,
  결과는 다음과 같아야 합니다: ‘natraps’*

<1. 어제 처음 써본 것>
지금 보니 진짜 쓸데 없는 짓을 했다. 문자열을 배열화하지 않아도 문자열의 n번째 요소에 접근 가능한데 도대체 왜 저렇게 했을까? 똥멍청이


<2. 오늘 혼자 고쳐본 것>
어제 수업할 때 for 반복문을 반대로 쓸 수도 있다고 말씀해 주셨던 게 기억나서 이런식으로 써봤다. 역시 실행이 제대로 안된다😇💥🔫 아니, 왜지? 완벽하게 한 것 같은데...


<3. chatGPT의 도움으로 고쳐본 것>
빨리 TIL 제출해야 하는데 5분 이상 붙들고 있어서 또 어쩔 수 없이 chatGPT 도움을 받았는데... 완벽하긴 뭐가 완벽해🫠 너무나 어이 없는 곳이 잘못돼있었다.
문자열 역시 배열처럼 인덱스가 0부터 시작하므로, i를 str.length로 둔 것부터가 잘못됐다. 그리고 마찬가지로 인덱스가 0인 문자열도 포함해야 하기 때문에 i는 0도 포함해야 한다.
와...!! 너무 어이없어...!! 이렇게 고치니까 'natraps'가 제대로 출력된다. 어이없어!


소수 구하기

Q. 주어진 숫자가 소수인지 아닌지 판별하는 함수를 작성해주세요.
  소수는 1과 자기 자신으로만 나누어지는 1보다 큰 정수**입니다.

 *힌트: 나머지 값을 구하는 연산자는 % 입니다. 
 → e.g. 3 % 2는 1입니다.

<1. 처음 써본 것>
나름 딴에는 생각해서... 1을 제외한 숫자를 만들어놓고... 근데 이거 배열로 했어야지 왜 문자열로 했을까? 똥멍청이 어쨌든 그렇게 해놓고, 해당 숫자들로 나눠봤을 때 나머지가 0이 되면 소수가 아니라는 식으로 생각해봤다. 그나저나 소수가 영어로 prime이구나... 나는 걍 sosu 이래 썼는데 ㅎ 다들 어쩐지 prime을 쓰더라... 영어쌤 출신인데 몰랐지 뭐야 ㅎ


<2. 튜터님 모범답안 보고 고쳐본 것>
생각해보니까 전제 자체가 틀렸다. 저 배열 속에는 소수가 아닌 숫자들도 포함돼 있을 뿐더러, 가령 11이나 17도 소수기 때문에 저런식으로 하려면 배열 안에 11이나 17이 있어야 한다. 소수가 몇 개나 존재하는지 알기 어렵기 때문에 그런 식으로 접근하면 안되겠다. 수포자의 한계
제공되는 숫자를 2부터 자기자신보다 작은 숫자까지 모두 사용하여 차례대로 다 나눠보고, 그 중 하나라도 0으로 나눠 떨어진다면 그 숫자는 소수가 아닐 것이다. 어쩜 이렇게 명료할 수가!


알고리즘 2차 강의는 어제 있었던 일이기 때문에 이 글은 어제 내용이고, 오늘은 코드카타가 연속으로 3개나 잘 풀려서 어제와는 다르게 자신감을 회복한 채로 아침을 맞이했다😇

그러고 나서 오늘은 하루 종일 개인 프로젝트를 준비하느라 정신이 없었고, 내꺼 완성하고 나서는 팀원분들을 도와드리려고 노력했다.

정신 없이 지나가 버린 또다른 일주일... 너무 '얼마나 성장했나'에 혈안이 되지 말고 차근 차근 울지 말고 그저 해야할 일을 하자... 아직은 얼마나 왔는지 뒤돌아 볼 때가 아니니🫠

2개의 댓글

comment-user-thumbnail
2024년 1월 5일

잘못 생각했던 부분들 다시 돌아보면서 하나씩 고쳐나가시는 모습이 너무 보기 좋네요 ㅎㅎ

답글 달기
comment-user-thumbnail
2024년 1월 8일

변수명은 알아보기 쉬운 거라면 뭐든지, 심지어는 한글로 해도 됩니다!

답글 달기