XR 플밍 - 3. 레벨 테스트1 오답노트 (3/21)

이형원·2025년 3월 21일
0

XR플밍

목록 보기
17/215

지금까지 공부해왔던 프로그래밍 언어에 대해 이해도가 어느 정도 되는지 확인할 수 있는 테스트를 진행했다. 그래도 나름 열심히 한 보람은 있는지 대부분의 문제를 막힘 없이 풀긴 했지만, 단순히 오답만이 아니더라도 조금 헷갈리거나 다시 정리해볼 필요가 있어 보이는 문제들에 대해 오답노트를 정리하고자 한다.

1. float 와 double에 관하여

  1. 다음 중 C#에서 허용하지 않은 문법을 고르시오.
    a. int intValue = 10;
    b. char charValue = ‘a’;
    c. float floatValue = 20.3;
    d. double doubleValue = 10.4;
    e. bool boolValue = true;

자료형에 관한 문제였다. 사실 그렇게 어려운 문제는 아니지만, 초장에 문득 막혀버린 것이, c 와 d 둘 다 정답인 이중 정답인 것 아닌가 하는 생각이 들었기 때문이다.
왜냐하면 float floatValue = 20.3f; 가 맞고 double doubleValue = 10.4d;가 맞는게 아닌가 싶어서였다.

그래서 일단은 c는 확실히 아니니까 c로 제출하고 Visual Studio로 가서 확인을 해 봤다.

이렇게 출력되는 걸 보고서 아, double 형태에서는 d를 생략해도 무방하구나 깨달을 수 있었다.
실제로도 찾아보니 float나 double을 선언하지 않고 실수를 선언하면, 기본적으로 double의 형태로 선언된다고 한다.

2. 강제 형변환

(당신은 함정카드에 걸려버렸습니다.)

  1. 다음 중 C#의 형변환으로 적합하지 않은 것을 고르시오.
    a. int intValue = (int)1.4;
    b. float floatValue = (float)”12.3”;
    c. float floatValue = 3;
    d. int intValue = int.Parse(“123”);
    e. double doubleValue = 3.14f;

다시 보니까 모르거나 못 푸는 문제는 아니었는데, 실수를 하고 말았다. 처음에 답이 e라고 생각하고 제출했는데, 잘 생각해보니 b번이 답이었다.

a. float형인 자료형을 int로 강제 형변환하였으니 맞다.
b. 문자열을 float형으로 강제형변환 할 수 없다. 맞는 답은 float floatValue = int.Parse("12.3");이다
c. 3은 int형이지만 float형으로 변환할 수 있으니 맞다.
d. 문자열 "123"을 int형으로 변환하는 문제였다. 변환이 가능하니 맞다.
e. c와 같은 상황이다. 3.14f는 float형이나 double 형으로 변환 가능하니 맞다.

3. 오버플로우

  1. 다음 코드의 출력을 적으시오.

문제 자체는 풀었지만, 생각보다 많은 이해도를 요구하는 문제였다. 사실 이 코드 그대로 출력해보면 이렇게 나온다.

이 문제를 풀기 위해서는 세 가지를 알아야 한다.

  1. byte가 표시할 수 있는 숫자는 0~255까지이다
  2. value++은 후위연산으로 1을 더해준다.
  3. 자료형이 표현할 수 있는 값을 초과하였을 때, 오버플로우가 발생하여 이상한 숫자가 발생한다
    -> 0 이 출력된다.

이 세 가지를 다 알아야 풀 수 있는 문제였다. 문제 자체는 맞췄지만 처음 본 순간 잠시 망설였던 문제이기도 해서, 오답노트를 해 봤다.

4. if 문에 관하여

오답이었던 문제는 아니었지만, 다른 상황에서 충분히 실수도 할 수 있는 부분으로 보여 따로 정리하기로 했다. 세 개의 문제가 연달아 있었기에 한 번 하나씩 뜯어보려고 한다.

  1. 다음 코드의 출력을 적으시오.

A) if 문에서 score가 80보다 크기 때문에 브론즈를 출력하지 않고 넘어간다.
이후 첫 번째 else if 문에서 score 가 90 이하인 것을 충족했으므로 출력은 실버 만 출력된다.

  • 출력 결과
실버
  1. 다음 코드의 출력을 적으시오.

(엥? 위에 거랑 같은 문젠데? 하고 문의하려 했는데, 자세해 보면 위의 문제와 달리 전부 다 if로 되어 있었다. 진짜 제대로된 함정문제...)
A) 20번 문제와는 다른 출력이 나온다. 첫 번째 if 문에서 score가 80점 이하가 아니니 출력되지 않지만, 다음 if 문에선 90점 이하가 충족했으므로 실버를 출력하고, 또 다음 if 문에서 100점 이하를 충족하므로 골드도 출력된다.

  • 출력 결과
실버
골드
  1. 다음 코드의 출력을 적으시오.

(논리 오류의 대표적인 예시다)
A) if 문에서 score 가 100 이하인 것이 충족되어 바로 골드 가 출력되고 종료된다

  • 출력 결과
골드

5. 함수의 참조 여부

문제상으로 함정 문제가 있을 거라고 하긴 했는데, 진짜 제대로 된 함정 문제가 하나 있었다.
맞추긴 했지만 한 번 정리할 필요성은 있어 보여서 정리했다.

  1. 아래의 코드를 보고 출력을 적으시오.

A)

1) Func1(5)가 실행된다. value에 5라는 값을 가지고 첫 번째 Console.Write가 실행된다.
후위연산이므로 5를 출력하고 value는 6이 된다.
2) value가 6인 상태로 Func2(6)으로 실행된다. 6이라는 값을 가지고 Func2의 Console.Write가 출력된다. 후위 연산이므로 6을 출력하고 value는 7이 된다.
3) (여기가 함정이다) Func2에서 7이 되었던 value는 Func1에 그 값이 반영되지 않는다. 1)에서 value가 6이 된 상태 그대로 두 번째 Console.Write가 실행된다. 6을 출력하고 Func1이 종료된다.
4) 즉 이렇게 하여 최종 출력되는 숫자는 " 566 " 이다.

이런 방식이 실제 상황에서도 많이 쓰냐? 라고 한다면 실제로 많이 쓴다고 한다. 어떻게??? 라는 생각이 문득 들다가도, 내가 하고 있는 게임 중에 이런 구조를 사용했을 시스템이 생각났다.

메이플스토리에 있는 스타포스 강화 시스템에는 두 번 연속으로 강화 하락 시 100 퍼센트 확률로 강화 성공하는 찬스타임이란 시스템이 있다. 이 때에는 확률을 일시적으로 100퍼센트로 올려야 하지만 이후에는 반영되지 않도록 해야 하니, 이런 시스템을 사용하지 않았을까 하는 생각이 들었다.

6. 구조체에 관하여

  1. 다음 중 구조체에 대한 설명으로 옳지 않은 것을 고르시오.
    a. 구조체는 여러 데이터를 하나로 묶어 관리하는 자료형을 정의하는 방법이다.
    b. 구조체 변수를 선언하는 경우 구조체 내용에 포함된 모든 변수가 같이 포함된다.
    c. 구조체의 변수에 접근하고 싶을 때 . 을 통해 접근할 수 있다.
    d. 구조체는 기본자료형만 포함이 가능하며, 구조체 안에 구조체 또는 열거형 변수는 포함할 수 없다.
    e. 구조체 변수에 접근제한자를 public으로 설정할 경우 외부에서 접근을 허용한다.

답은 d로 맞췄지만 생각보다 헷갈렸던 문제라서 다시 한 번 정리해보고자 한다.

구조체는 사용자 정의 데이터 유형(Data Type), 비유하자면 여러 데이터를 담을 수 있는 박스이다. 구조체는 이러한 박스들, 즉 여러 자료형들을 모아 조합하여 또 다른 자료형을 만들어 사용할 수 있게끔 한다. 이 과정에서 만들어진 자료형으로 변수를 선언하면, 해당 변수는 우리가 지정한 자료형들의 집합체가 된다.

구조체에는 구조체 안의 구조체 또는 열거형 변수를 포함할 수 있다.

7. enum

  1. 다음 코드의 출력을 적으시오.

실수한 문제나 헷갈리는 문제를 제외하고, 유일하게 풀지 못했던 문제다.
Autumn을 20으로 했으니 (Season)21이 Winter 로 출력되는 건 알겠는데.
50은 아예 할당되지 않았는데 어떻게 출력될까?

일단 Spring은 0, Summer는 1, Autumn = 20, Winter = 21이다. 그러면 문제는 (Season)50 은 오류로 출력될까? 아니면 달리 출력될까?

오류가 안 걸린다. 그러면 이대로 출력해 볼까?

결과는... 그냥 숫자 그대로 출력되는 것이었다. 즉 정답은 아래와 같다.

Winter
50

후기

이제는 제법 프로그래밍 기초에 대한 걸 알고 있다고 생각했는데, 아직도 모르는 게 나오기도 했다.
특히나 이런 기본적인 내용 이상으로 코딩 테스트 같은 것은 여전히 끙끙대면서 풀고 있으니, 응용 및 구현 능력을 키우는 건 더욱 어려울 것이다.
그래도 제법 아는 것이 늘었다는 느낌을 받았고 부족한 부분을 더 공부해 볼 필요성을 느꼈다.

profile
게임 만들러 코딩 공부중

0개의 댓글