본문 바로가기
코딩일기/TIL

TIL-5 프로그래밍 기초1 테스트 (JavaScript)

by 2pro.e_pro 2024. 6. 20.
728x90
반응형

TIL-5 프로그래밍 기초1 테스트 (JavaScript)

prologue. 문제를 잘 읽어야 문제를 잘풀지~

돌다리고 두들겨 보고 가라는 말이 있듯..

문제를 풀때는 문제를 제대로 이해하고 풀어야 한다..

 

 

 

프로그래밍 기초1 테스트 (JavaScript)

Q1. 90점을 넘으면 A등급, 아니라면 B등급을 출력하는 소스코드입니다. 빈칸에 들어갈 알맞은 소스코드는?

const score = 85;
let grade;
(빈칸)
console.log(score+"점은 "+grade+"등급입니다.");

//실행결과 : 85점은 B등급 입니다.
  1. (score>90)? score='A' : 'B';
  2. (score>90) : score='A' ? 'B';
  3. grade=(score>90)? 'A' : 'B';
  4. if (score>90) grade='A'; if else grade='B';

 

💡 문제풀이

위 문제에서는 삼항연산자의 올바른 사용법을 묻고있다.

삼항연산자의 올바른 방법은 변수 = (조건) ?(이라면) "true" :(아니면) "false" 인데

문제에서는 const score = 85 로 되어있으며 let grade 를 통해 해당하는 등급을 구하는 문제이기 때문에

grade = 이라는 변수에 대한 값이 할당 되어야 하며 이후 정확한 삼항 연산자가 작성되어야 하므로

 

답은 3번

 

Q2. 534자루의 연필을 30명의 학생들에게 똑같은 개수로 나누어줄 때 1인당 몇개를 가질 수 있고, 몇개가 남는지를 구하는 코드입니다. (1), (2)에 들어갈 알맞은 코드가 짝지어진 것은?

let pencils = 534;
const students = 30;

const pencilsLeft = (1) ;
pencils -= pencilsLeft; // 남는 연필을 일단 빼서 딱 나누어떨어지게 만들기.
const pencilsPerStudent = (2);
  1. (1) pencils%students (2)pencils%students
  2. (1) pencils/students (2)pencils/students
  3. (1) pencils/students (2)pencils%students
  4. (1) pencils%students (2)pencils/students

 

💡 문제풀이

위 문제에서는 각 (숫자)에 대하여 정확한 수식을 작성하는 문제이다.

해당 문제에서의 풀이를 제대로 이해했어야 하는데 문제의 주석을 문제와 동일하게 이해해서 딱떨어지게... 말그대로 0이 되게끔 하기 위해 나는 1번으로 답했다.

 

위와 같이 1번으로 정한 이유는 아래 사진과 같이 판단해서 인데

 

let pencils = 534;
const students = 30;
const pencilsleft = pencils % students;
console.log(pencilsleft);

const pen = (pencils -= pencilsleft);
console.log(pen);

const pencilsPerStudent = pencils % students;
console.log(pencilsPerStudent);

 

 

위 코드와 같이 풀이를 한다면

아래와 같이 숫자가 딱떨어져서 없어지게 된다..

 

오답의 console.log() 출력 값

 

 

그게 아니라 각 학생당 나머지를 제외한 딱 떨어지는 연필의 갯수를 만들어야 하는것이었기때문에 

let pencils = 534;
const students = 30;
const pencilsleft = pencils % students;
console.log(pencilsleft);

const pen = (pencils -= pencilsleft);
console.log(pen);

const pencilsPerStudent = pencils / students;
console.log(pencilsPerStudent);

위 수식과 같이 마지막엔 나머지 연산자 (%) 가 아닌 나누기 연산자 ( / ) 가 적용되었어야 했다.

 

문제를 잘 읽고 잘 이해하자..

올바른 console.log() 출력 값 다

답은 4번

 

Q3. 다음 코드를 실행했을 때 출력 결과는?

const score = 85;
const result = (!(score>90))? "가" : "나";
console.log(result);
  1. “가”
  2. “나”

💡 문제풀이

위 문제에서는 주어진 삼항 연산자에 의한 정확한 답을 구해야 하는 문제이며

기본적으로 Boolean 값("True" & "False")은 감싸져 있는 "" 큰 따옴표가 문자열을 표현해주는 것이기에

값의 출력에서는 "" 큰 따옴표가 없이 나오는것이 기본적인 원리이기때문에

1. 가  or  3. 나 중 하나가 답인데 해당 문제의 함정은 거기에 있지 않고

바로 const 로 선언된 result의 삼항 연산자에서 쓰여진 부정연산자 ! 느낌표 다.

해석하자면 ! 가 붙기 때문에 score는 90보다 > 크니? 가 아닌 크지 않니? 가 되는것이고

기본적으로 문제에 있는 삼항 연산자에는 false가 맞는지를 물어보는것. 

 

📌정리

const result = ((score>90))? "가" : "나"; 였다면 삼항연산자 내에서 지칭하는 score는

const score = 85; 이기 때문에 자연스럽게 false 값인 나를 향하는게 맞지만

 

const result = (!(score>90))? "가" : "나"; 에서는  부정 연산자인 ! 가 붙기때문에

false를 포함하여 물어보는 수식이 되기 때문에 "나 "가 아닌 "가"를 출력함이 옳다.

 

답은 1번

 

Q4. 다음 중, 틀린 문장은?

  1. if문은 조건식의 결과에 따라 실행 흐름을 달리할 수 있다.
  2. if문은 조건식이 true이면 블록을 실행하고 false이면 블록을 실행하지 않는다.
  3. if문의 블록 내부에는 또 다른 if문을 사용할 수 있다.
  4. switch문에서 사용할 수 있는 변수의 타입은 int만 가능하다.

 

💡 문제풀이

 

  • if문은 조건식의 결과에 따라 실행 흐름을 달리할 수 있다.
    • ⭕맞는 문장. if 문은 조건식이 true일 때와 false일 때 다른 실행 흐름을 가질 수 있게 해준다.
  • if문은 조건식이 true이면 블록을 실행하고 false이면 블록을 실행하지 않는다.
    • ⭕맞는 문장. if 문은 조건식이 true일 때 블록 내부의 코드를 실행하고, false일 때는 실행하지 않는다.
  • if문의 블록 내부에는 또 다른 if문을 사용할 수 있다.
    • ⭕맞는 문장. if 문은 중첩될 수 있으며, 블록 내부에 또 다른 if 문을 사용할 수 있다.
  • switch문에서 사용할 수 있는 변수의 타입은 int만 가능하다.
    • ❌ 틀린 문장. switch 문에서 사용할 수 있는 다양한 타입이 가능하다.

 

답은 4번

 

Q5. 두개의 숫자 a, b중 a가 큰지, b가 큰지를 구하는 프로그램입니다. (1), (2)에 들어갈 알맞은 코드가 짝지어진 것은?

if ( (1) ){
  console.log("a가 더 큽니다.");
}
else if ( (2) ) {
  console.log("b가 더 큽니다.");
}
else{
  console.log("두 숫자가 같습니다.");
}
  1. (1) a>b (2) b>a
  2. (1) a>=b (2) b>=a
  3. (1) b>a (2) a>b
  4. (1) b>=a (2) a>=b

💡 문제풀이

비교 연산자를 사용하면 쉽게 구할 수 있는 답이다.

각 (숫자)에 답을 구하는 것인데.

(1)은 a>b 표현이 옳고 (2)는 b>a 표현이 옳다.

 

답은 1번

 

Q6. 중첩 조건문은 논리 연산자를 적용해 하나의 조건문으로 만들 수 있습니다. 빈 칸에 어떤 논리 연산자가 들어가야 할까요?

if(x>10){
  if(x<20){
    console.log("조건에 맞습니다.");
  }
}

//바꾼 뒤
if ( 빈칸 ){
  console.log("조건에 맞습니다.");
}
  1. x>10 || x<20
  2. x>10 && x<20
  3. x>10, x<20
  4. x>10과 x<20

💡 문제풀이

중첩된 if 조건문을 하나의 if 문으로 리팩토링 하는 과정에서

중첩된 if문에서 다룬 조건을 모두 포함하는 수식이 작성되어야 하며

논리곱 연산자 or 논리 And 연산자로 불리는 && 를 사용해서 둘다 true로 판단이 되어야 하기 때문에

 

답은 2번

 

Q7. 다음 프로그램의 실행 결과를 예측해보세요.

for (let i=0;i<3;i++){
  console.log(i);
}
  1. 0 (줄바꿈) 1 (줄바꿈) 2
  2. 1 (줄바꿈) 2 (줄바꿈) 3
  3. 0 (줄바꿈) 1
  4. 1 (줄바꿈) 2

💡 문제풀이

해당 문제는 1주차에 진행하고있는 팀과제 숫자 야구게임을 for 문으로 적용하면

구현해야 하는 for문의 수식이다. 설명을 이어 나가자면 여기서의 중점인

for (let i=0;i<3;i++)  <=== 이 수식이 지향하는 바를 잘 판단해야 하는데

i < 3      i는 3보다 작다라는 표현이므로 3보다 작은 숫자 또는 인덱스를 출력할 수 있다고 추측이 가능하다.

 

그리고 문제에서는 0 (줄바꿈) 1 (줄바꿈) 2 이라는 표현이 들어가 있기 때문에

이것은 인덱스 구성을 어떻게 하는지 묻는 문제가 됨을 유추 할 수 있고

 

다시 i < 3  을 가져올 때 3보다 작기 때문에 3에 못미치는 숫자 0, 1, 2 를 가리킨다고 판단이 가능하다

그러면 console.log(i) 출력될 값은  0 (줄바꿈) 1 (줄바꿈) 2 이 되며

 

답은 1번

 

Q8. 다음은 십의 자리 이하를 버리는 코드입니다. 변수 value의 값이 356이라면, 300이 나올 수 있도록 빈칸에 알맞은 코드를 넣어주세요. (부분점수 있음)

let value = 356;
console.log( (빈칸) );
// 예) 입력값이 356일 때, 300으로 출력이 되어야 합니다.
// value에 어떤 수가 와도 십의 자리 이하를 버리는 코드가 되어야 합니다.

 

 

💡 문제풀이

해당 문제는 코드 스니펫에 결정적인 조건이 붙어 있다. 어떤 숫자가 와도 10의 숫자를 버려야 한다는것

그래서 여기에서는 약간의 메소드가 추가 되어야 하는데 숫자와 관련된 답을 구해야 하기 때문에

Math. 메소드중 적합한 수식을 사용할만 하다고 판단하였다.

 

먼저 Math.floor 메소드를 고려해 볼 수 있는데

해당 .floor는 바로 소숫점을 내림처리하여 없애 주기 때문에 소수를 정수화 할 수 있다.

그러므로 Math.floor를 써볼 수 있지만 사전에 주어지는 let value의 값이 소수가 되어야 하기 때문에

console.log(value / 100);

 

해당값이 나의 가설 안에서 value를 소숫점으로 만들 수 있는지 1단계로 확인하고 3.56이 출력됨을 확인했기 때문에

이후 Math.floor()를 사용하여 한번더 감싸게 된다.

 

마지막 단계로 소수점을 전환을 위해 100을 나눈값을

다시 원상복구 해야하니 100을 추가로 곱해여 아래와 같은 수식을 완성한다.

let value = 356;
console.log(Math.floor(value / 100) * 100);

 

그렇게 되면 어떤 수가 오더라도 0.00이 적용 되었다가 다시 100을 곱하게 되니 십의자리까지만 00으로 초기화된

숫자가 출력되게 된다.

 

그리하여 나의 답은 아래와 같다.

let value = 356;
console.log(Math.floor(value / 100) * 100);

 

 

Q9. 주어진 input이 짝수인지 홀수인지 판별하는 switch문입니다. 빈칸에 들어갈 알맞은 코드를 넣어주세요. (산술 연산자만 사용하세요.) (부분점수 있음)

let input = 13;

switch ( (빈칸) ) {
  case 0:
    console.log("짝수입니다.");
    break;
  case 1:
    console.log("홀수입니다.");
    break;
}

 

💡 문제풀이

해당 문제는 input의 값이 짝수 인지 아닌지 산술 연산자만 활용하여 추론할 수 있게 하는 문제이다.

해당 값은 간단하다. input % 2 가 (빈칸) 부분에 들어가면 %2 수식을 통해 2의 배수인지를 판단할 수 있는데

나머지 연산자에서 2가 남으면 2의 배수 2가 아니라면 1이 남게 되니 홀수가 되는것.

 

그래서 문제에서의 input은 13이기 때문에 case 1의 답변이 나오게 될 것이고

만약 input이 12라면 case 0의 답변이 나오게 될것이다.

 

그리하여

 

답은 input % 2

 

 

Q10. 다음 프로그램의 결과를 예측해보세요. (부분점수 있음)

for(let i=0;i<10;i++) {
	if(i==5) continue;
        if(i==7) break;
	console.log(i);
}

 

 

💡 문제풀이

해당 문제는 for 반복문의 구동원리를 이해해야 풀 수 있는 문제이다.

여기서 for(let i =0; i<10; i ++) 수식을 통해 i는 0 에서 10 이전 까지의 숫자를 순회 하게 된다.

 

또한 for문 안에는 두가지의 if 조건문이 포함되어있는데 이 중 두가지 표현에 집중할 필요가 있다.

 

첫번째 continue는 (i==5) i 가 5와 같아지면 continue(건너뛰어라)는 뜻이고

두번째 break는 (i==7) i  가 7과 같아지면 멈추라는 뜻

 

그리하여

 

답은 012346

728x90
반응형

댓글