해결된 질문
작성
·
243
·
수정됨
0
15:15 에서 선생님의 풀이를 통해 제가 헷갈리고 모르는게 무엇인지 찾았습니다.
초기값의 경우, int a=1, b=1, sum=0 이라고 주어졌지만
반복문에서 조건식에 들어가는 순간 블럭{} 내에서 변수값이 변화하는 과정(else문)에서 a 가 1일 때 sum을 0으로 주는 게 맞는지 -1로 주는 게 맞는지 헷갈립니다.
저의 풀이는 다음과 같습니다.
a=1, b=1, sum=0 처음엔 이렇게 시작했다가 if문의 else를 거쳐서 sum=-1로 변했기에 a=1, b=1, sum=-1 로 시작하여 문제를 풀었습니다.
결과적으로,
a=1, b=1, sum=-1
a=2, b=3, sum=-4
a=3, b=5, sum=-9
a=4, b=7, sum=-16
a=5, b=9, sum=-25
a=6 반복문 종료
운이 좋게도 해당 문제는 답이 맞다고 풀었지만 다른 기출문제의 경우는 a가 x일 때, b 값은 몇인지 구하는 과정에서 한단계씩 엇박자가 나는 바람에 틀리는 경우가 있습니다(선생님의 풀이를 보면 초기값이 sum=0이기에 당연히 여기서 시작하셨고 a=2 일 때, sum=-1이라고 계산한 것처럼요)
저 나름대로 반복문을 풀이할 때, 헷갈리지 않기 위해 표형태로 값을 써내려가면서 계산할 때 변화를 짐작하는 방법으로, 다음과 같이 번호별로 하나로 묶어서 변수값의 변화를 계산했습니다.
반복문 외부 초기값->for 초기화->for 조건식
for 블럭{}->for 증감식->for 조건식
이러면 값은 맞게 나오긴 하는데 전공자 입장에서 이렇게 생각하고 풀이하는 것이 맞는지 궁금합니다.
답변 2
1
안녕하세요, 먼저 정답을 맞히셨다니 축하드립니다.
올려주신 풀이 방법을 보니, 첫 바퀴를 계산이 완료된 상태로 작성하셨고 어쨌든 푸셨다는 것이네요.
사실 뭐, 비전공자랑 전공자가 코드를 읽는게 다르겠습니까?
전공생에 개발자였던 저 조차도 질문 올려주신 분과 똑같이 생각하고 똑같이 코드를 봅니다.
반복문 읽는 것은 학생분이나 저나 같을 것입니다. (제가 특별히 다르게 보는 건 없고요;;)
첫번째에 sum을 0으로 시작하든 -1로 시작하든 사람마다 작성하기 나름입니다.
0으로 시작해서 블럭이 끝날 때 -1이 되어있네 라고 작성하셔도 되고,
아니면 초기값 자체를 적지 않고 질문 작성해주신 분처럼 -1로 쓰셔도 됩니다.
정답을 맞히기만 하면 됩니다. 뭐가 옳고 틀린 것은 없다고 생각해요.
제가 강사로서의 역할은 if문과 덧셈 뺄셈을 최대한 헷갈리고 어렵게 만들어서
여러분들이 시험에서 문제를 맞히게 하는 것입니다.
기출 문제 보시면 아시겠지만, 저정도로 헷갈리게 나오는 것은 드물긴 합니다.
그럼 답변은 그렇다치고, 저는 어떻게 읽는가 말씀을 드리면
애초에 저는 a의 변화만 봅니다. 왜냐하면 실제 우리가 개발하는 코드는 보통 패턴이 있습니다.
(현실에서 정보처리기사 문제 같은 말도 안되는 코드를 보지는 않으니까요.)
왜 우리가 C언어에서 자주 보는 i나 j 같이 반복문에서 계속 바뀌는 변수 있잖아요? 그것 말씀드리는 것입니다.
그래서 처음에는 a가 어떻게 바뀌는지만 봅니다. sum, b는 보지도 않습니다.
a가 1씩 증가한다는 것을 알았으니, 몇번 도는지만 판단합니다.
'1부터 시작해서 5까지니까 1, 2, 3, 4, 5까지 5번 돌겠네.'
그리고 그제서야 b를 보겠죠.
왜냐하면 b가 루프문의 탈출조건(여기서는 sum의 최종 출력값 결정)을 결정하는 변수이기 때문입니다.
1로 시작했는데 3씩 더해지는 b 특성상 애초에 짝수에 판별되는 조건문은 들를 필요가 없다고 볼 겁니다.
그럼 저는 아예 손으로 해당 if문을 지워버립니다. 작동하지 않을 코드니까요.
그러고 이제 sum에 계속 마이너스 누적하고 출력값 끝내고 문제를 마치지 않을까 싶습니다.
말이 길었는데, 요약하자면
실제 개발을 했던 개발자들은
1. 반복문에서 바뀌는 값 (iterator라고 부름. 여기서는 a)
2. 반복문의 탈출조건 (최종 리턴값을 결정하는 변수나 break가 걸리는 조건문, 혹은 최종 출력값 등)
이렇게 2개를 중점적으로 보지 않을까 조심스레 추측해봅니다. 제가 그렇거든요.
감사합니다.
0