1주차 3회 - 반복문, 시간복잡도 2022-08-24

CodeModel·2022년 8월 24일
0

인사말

오늘은 반복문에 대해 배웠다. 반복문을 어느정도 잘 한다고 생각했었지만 직접 작성하며 어려운 문제들을 풀어보니 내가 아직 부족하다고 생각했다. 오늘은 반복문의 기본 개념과 어려웠던 문제를 작성해보고자 한다.

반복문 개념

for (초기화; 조건식; 증감문) {}

반복문 문제

어려웠었던 반복문 문제를 몇가지 소개하고자 한다. 문제 전체를 적어도 되는지 몰라 간단하게 적어 보겠다.

비트연산자를 이용해 홀수 짝수 판별

첫번째 어려웠던 문제는 홀수, 짝수를 판별하는 문제였다. 보통의 경우 쉬운 문제지만 '/' 와 '%'를 사용하면 안돼는 문제였다. 어떻게 해결하는지 감도 안잡혀 구글링으로 계속 계속 검색했다. 그래서 발견한 해결책은 비트 연산자였다.

&

비트연산자를 이용해 while(num & 1) 반복문 안에 return true; 넣는다면 홀 수일때는 true가 나오고 while문 밖에 return false;를 적는다면 짝수에는 false를 적는다.

while문 증가할 때 마다 홀수

while문 증가할 때 마다 홀수를 판별하는 문제를 풀었다. 처음 이와 비슷한 문제를 풀었는데 너무 어렵고 복잡하게 풀었었다. 증가하는 while의 조건을 위해 선언한 변수와 홀 수를 표현하는 변수를 동일한 변수로 사용하려 했었다. 그러다 보니 너무 복잡해서 어려워졌다. 그런데 번뜩이는 아이디어를 이용해 변수를 2개를 선언하여 해결하였다.

소수를 이중 for문을 이용해 만들기

이 문제는 정말 어려웠다. 이 전에 소수를 구해서 true false 를 구하는 문제를 풀었는데 이 문제도 굉장히 어려웠다. 그런데 이번에는 이중 for문을 이용해 구하라고 했는데 너무 어려웠다. 20분정도 페어와 같이 풀어보았는데 도저히 정답이 나오지 않았다. 이러다가는 이 문제로 오늘 하루를 끝낼 것 같아 일단은 넘어가자고 페어와 이야기했다. 그렇게 다른 문제는 해결했지만 끝까지 이 문제를 해결하지 못했다. 그렇게 실시간 zoom 시간이 되었고 어떤 문제가 제일 어려웠냐고 물어보셨다. 채팅창에는 이 문제와 이 전의 문제 이야기가 매우 많이 나왔고 나만 어려웠던게 아니였구나 생각을 했다. 일단 이중for문은 소수를 구하는법 방법을 정리하며 풀을 수 있었다. 소수를 구하는 방법에 중요한 3가지가 있었는데

1. 1일때는 소수가 아니다
2. 2일때도 소수이다
3. 짝수는 소수가 아니다

여기서 1번과 2번을 해결하는게 어려웠는데 선생님께서 먼저 1번과 2번을 변수에 값을 할당하고 그 후 for문을 3부터 시작하였다. 그렇게 생각하고 풀었더니 나름 풀 만 했다. 그렇게 수업이 끝나고 바로 문제를 풀었으며 해설을 봤는데도 어려웠었다. 그렇게 20분정도 시간을 잡아 문제를 해결하고 모든 코플린 문제를 해결하였다.

제곱근을 이용해 소수를 구하는 방법

제곱근을 이용하면 제곱되는 수 이후의 소수를 구할 이유가 없다. 그 이유는 약수를 곱하면 그 이후의 값을 구하지 않아도 되기 때문이다. 제곱근을 이용하는 메소드를 알아보자

Math.sqrt()

이 메소드를 이용해 제곱근을 구할 수 있다.

시간복잡도

오늘 zoom시간에 선생님께서 시간복잡도가 무엇인지 알아보라는 숙제를 내주셨다. 그래서 시간복잡도에 정의와 왜 필요한지를 적어보려 한다

마무리

오늘 실시간 zoom 시간에 배웠던 내용을 작성하며 마무리하겠다.

의사코드를 열심히 작성하자.

의사코드를 이용하면 문제를 천천히 해석할 수 있다.

디버거를 사용하자.

디버거를 사용하면 내가 작성한 코드를 순서대로 어떠한 결과가 나오는지 알 수 있다. 디버거 사용 방법을 작성하겠다.

  1. 개발자 도구를 열어 debugger; 를 입력한다
  2. 그 후 입출력예시를 붙여넣기 해준다
  3. 그럼 디버깅 도구가 열리는데 화살표 동그라미 왼쪽을 누르면(F9)
  4. 개발자도구가 어떤 순서로 확인하는지 알 수 있다.

알게된 점

조건문은 채망으로 거른다고 생각하자!

자바스크립트의 result를 선언할때 아무 값이라도 넣어놔야한다 아니면 undefined가 나온다

오늘은 정말 어려운 문제들을 푸느라 많은 시간이 걸렸다. 마지막 문제를 해결할때 나름 간단하게 풀었는데 그 때 했었던 말이 잊히지 않아 그 말을 작성하며 마무리 하겠다.

저희 성장한 것 같아요!

profile
개발자가 되기 위한 일기

0개의 댓글