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

voyager 999·2024년 1월 4일

JavaScript

목록 보기
10/19

어제부터 시작된 알고리즘 그리고 코드카타... '나 괜찮을까?' 하고 큰 좌절감을 맛보게 되었다🥲 객관적으로 생각해 본 현상황 나의 문제점은 아래와 같다.

1. 기본 코딩 능력이 많이 부족하다
아직 함수 표현식, 함수 선언문 작성하는 것조차 잘 안된다. "엥 분명히 공부한 대로 잘 썼는데 왜 실행이 안되는거지?" 하고 살펴보면, if 조건문에서 ; 대신 ,를 썼다거나, 괄호로 한 번 감싸줘야 하는 단계를 생략했다거나, 함수 선언할 때 let/var/const 없이 썼다거나...

->뭐.... 이건 방법이 없다... 그냥... 그냥 많이 해보고 익히고... 코딩 능력을 키우는 수밖에 없겠다.

2. 그래서 어떻게 코드를 짜긴 했는데 프로그래머스 형식으로 정리하기 어렵다
프로그래머스 이용 이틀차인데 "아니 분명히 return 했는데 출력 외않되"를 지속적으로 겪고 있다.

->이것도 뭐... 방법이 없다... 그냥... 많이 해보는 수밖에...

3. 기본적인 자바스크립트 메서드를 많이 알지 못한다

->방법이 없.... 시간을 내서 기본 메서드 관련 영상을 찾아보고 나머지 공부를 해야겠다.

모든 길이 '다 울었니? 그럼 이제 공부해라'로 통하고 있다.

공부를 해야지 뭐 어쩔 도리가 없다.jpg


최댓값 찾기

Q. 다음과 같이 숫자로 이루어진 배열이 있을 때, 이 배열 내에서 
   가장 큰 수를 반환하시오.

   [3, 5, 6, 1, 2, 4]

<1. 맨 처음에 짠 것>

<2. 처음 짠 걸 활용해서 고쳐본 것 with chatGPT의 도움>

내가 결국 마지막에 얻으려는 값이 무엇인지를 생각해 봐야 할 것 같다. 이 함수를 통해서 내가 구하려고 하는 것이 문자열인지, 객체인지, 배열인지, 배열 속 요소인지 요소들의 합인지 어떤 것인지 잘 생각해 두고 먼저 그 값을 초기화 해둔 다음, 마지막에 걸러진 값을 덮어씌우는 형식으로 하라고 chatGPT가 조언해주고 있다.


UP & DOWN

Q. 
1. 프로그램이 1~100의 숫자 중 하나를 랜덤으로 정합니다.
2. 사용자는 이 숫자를 맞추어야 합니다! 
: 입력한 숫자보다 정답이 크면 → “UP” 아니면 → “DOWN”, 
  정답이면 → “CORRECT” 출력
3. 지금까지 숫자를 입력한 횟수를 알려줍니다.

<1. 맨 처음에 짠 것>
정답 숫자를 myNum으로, 사용자가 추측하여 입력하는 값을 num으로 두고 간략하게 생각해 본 내용이다.


<2. 튜터님 모범답안을 보고 수정해 본 것>
나는 if문, else if문에 count++를 넣어뒀는데, 엄밀히 말하면 console.log()가 실행될 때 count가 된다기보다는 숫자가 입력되는 단계에서 count 되는 거니까 이런 식으로 하는 게 훨씬 명료한 것 같다. 또한 if 조건문이 실행되고 함수가 종료되는 게 아니라 다시 숫자를 입력할 수 있어야 하므로 askQuestion()을 또 실행시켜준다. 정답을 맞힌 경우에는 로직이 종료된다.

그래도 모범답안 코드의 전반적인 흐름에서 아예 벗어나게 짠 건 아닌 것 같아서 조금 마음이 놓이는 문제였다.


문자열 요약하기

Q.
1. 입력으로 소문자의 알파벳 순으로 정렬된 문자열이 입력됩니다.
2. 각 알파벳은 중복이 가능합니다.
3. 중간에 없는 알파벳이 있을 수도 있습니다.

입,출력 예시와 같이 입력 문자열에 나타나는 
각 알파벳의 종류,갯수를 요약하여 나타내시오.

# 문제의 번호별 조건에 대한 입력 예시와 출력
Ex 1)
abc 	# a1/b1/c1

Ex 2-1)
aaabbbc	# a3/b3/c1

Ex 2-2)
abbbc	# a1/b3/c1

Ex 3-1)
ahhhhz	# a1/h4/z1

Ex 3-2)
acccdeee	# a1/c3/d1/e3

<1. 맨 처음에 짠 것>
어제 수업을 들으면서 단 한글자도 적지 못하고 눈물로 소매를 적셨는데 ...더보기


<2. 오늘 처음으로 짜본 것>
하루가 지난 오늘 이 정도로 적어볼 수 있다는 건 그만큼 내가 조금은 발전 했다는걸까? 🥹(그렇다고 해주세요) 문자열 내 i번째 글자와 i+1번째 글자를 비교했을 때 같으면 num을 올려서 출력하고, 다르면 그냥 숫자 1(1개는 무조건 있으니까)을 붙여서 출력하는 느낌으로 생각했다.


<3. 처음 짠 걸 활용해서 고쳐본 것 with chatGPT's help>
어라...? 생각보다 내가 첨에 짠 것에서 크게 다르지 않다😮 여기서도 마찬가지로 내가 결국 최종에 구하려는 값은 1. 문자열 2. 문자의 갯수 이므로 먼저 변수로 빈공간을 만들어주는 것에서 시작했다.

그리고 if 조건문 함수 안에 return문을 넣으면 값을 반환함과 동시에 해당 함수가 종료되기 때문에 의도한대로 반복이 일어나지 않게 되므로, return은 조건에 맞는 함수가 다 돌아가고 나서 하는 걸로 고쳐준다.

str[i]와 str[i+1]이 같으면 num에 1을 더해주는데, 이걸 또 내가 아마추어처럼 num + 1로 썼었기 때문에 num++로 바꿔주었다. str[i]와 str[i+1]이 같지 않으면 num은 그냥 1로 출력된다.

이렇게 실행하니 a2b2c1 이라는 값을 얻을 수 있게 되었다!!!!!

엥 뭐야 잘 되잖아


알고리즘 녀석 나를 울렸다가 웃겼다가 들었다놨다 해서 머리가 어질어질하다🥲 그래도 점차 발전하고 있는 거겠지...?

어제 담임 매니저님이 한 달 정도 뒤에는 이것보다 어려운 문제도 뚝딱-! 풀고 있을거라고 해주셔서 조금 위안이 되었다.

이제 개인 프로젝트 집중하러 가야겠다...! 남은 시간도 화이팅😫

0개의 댓글