[DAY4] 제어문: 조건문과 반복문

제어문

console.log('A');
console.log('B');
console.log('C1');	// 경우에 따라 C1, C2를 실행시키도록 하려면?
console.log('D');

위와 같은 프로그램을 실행시킨다고 가정하자. 경우에 따라 만약 C1을 출력시키거나, 혹은 C2를 출력시키려면 어떻게 해야할까?

console.log('A');
console.log('B');
console.log('C2');
console.log('D');

새로운 프로그램을 만들어 경우에 맞는 상황의 프로그램을 실행시키면 될 것이다. 하지만 그 경우의 수가 1억개 이상이라면, 프로그램의 코드 작성줄이 1억 줄을 넘어간다면 우리는 같은 방법으로 문제를 해결할 수 있을까?
코드 수정할 때도 1억개가 넘는 서로 다른 프로그램을 수정하는 것은 상당히 어려운 일이다. 한 프로그램 당 1억줄이 넘는 코드를 보는 것조차도 어려울 것이다. 이러한 문제 상황을 해결해줄 수 있는 도구가 바로 제어문(Flow control statements)이다.

제어문이란, 프로그램의 흐름을 제어할 수 있도록 도와주는 실행문을 말한다.
제어문의 종류는 조건문, 반복문, 선택문으로 나뉜다.

조건문

조건문(Conditional statement)은 조건에 따라 특정 실행문을 실행시킬 수 있다.

기본적인 if..else 의 형태는 다음과 같다

if (조건) {
  만약 조건(condition)이 참일 경우 실행할 코드
} else {
  대신 실행할 다른 코드
}

그럼 우리는 조건문을 앞서 직면했던 문제에 대입해 활용해보자.

console.log('A');
console.log('B');
if(true){
  console.log('C1');
} else{
  console.log('C2')'
}
console.log('D');

조건문인 if에 상황에 맞는 조건을 제시하게 되면 우리는 앞서 직면했던 문제들을 조금 더 효과적으로 해결할 수 있게 되는 것이다.

else if

앞서 직면했던 문제는 두 가지 선택, 또는 결과이었다. 그렇다면 우리가 두 가지보다 더 많은 경우를 원한다면 어떻게 활용할 것인가? 에 대한 물음이 있을 수도 있겠다.
그런 경우에는 if..else 사이에 else if를 활용할 수 있다.

if (조건) {
  만약 조건(condition)이 참일 경우 실행할 코드
} else if (조건2) {
  만약 조건2가 참일 경우 실행할 코드
} else if (조건3) {
  만약 조건3가 참일 경우 실행할 코드
} else {
  조건1,2,3 이외에 대신 실행할 코드
}

또한 우리는 추가적인 선택의 옵션을 보여주기 위해 if..else중첩으로도 활용할 수 있다.

반복문

반복문(Loop statement)은 반복해서 특정 실행문을 실행시킬 수 있다.

앞서 다룬 코드를 활용하여 우리가 C1,C2를 2번 반복하고 싶다고 한다면 어떻게 해결할 수 있을까?

이러한 문제를 해결해줄 수 있는 도구가 반복문이다.
기본적인 while문의 형태는 다음과 같다.

while (조건) {
  // 반복해서 실행시킬 코드
}

이런 기본적인 형태로 우리는 문제를 해결할 수 있
다.

console.log('A');
console.log('B');
var i = 0;
while (i < 2) {
  console.log('C1');
  console.log('C2');
  i = i + 1;
}
console.log('D');

while문 이외에도 for문과 같은 반복문이 존재하지만, 배열에 대한 개념을 이해한 다음에 더 자세히 알아보도록 하겠다.

백준 문제 풀이

단계별 풀이에서 if문과 while문 부분의 문제를 다뤘다.

[시간초과] 1110번 더하기 사이클

내가 작성한 코드

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin');

let num = input;
let sum;
let i = 0;

while(true){
     i+=1;
     sum = (num%10) + Math.floor(num/10);
     num = (num%10)*10 + (sum%10);
     if(input === sum){
         break;
     }
}
console.log(i);

시간 초과가 떴는데 다른 방법도 고민해보아야 겠다. 머리 아파

정리 및 느낀 점

평소에 python을 많이 활용했는데 javascript를 활용해서 백준 문제를 풀어보니 SyntaxError를 종종 만나게 되었다. 혼동하지 않게 코드 사용을 하도록 유의해야겠다. 또 백준에서 문제를 fs모듈을 활용해서 풀고 있었는데, 어떤 문제는 readline모듈을 활용해야만 정답처리 되는 문제들도 있었다. 확실히 node.js로 알고리즘을 푸는 게 시간도 오래 걸리고 python에 비해서 버거웠다. 그렇지만 내일도 힘내서 열심히 해야겠다!

좋은 웹페이지 즐겨찾기