책 내용 질문하기
2017 시나공 정보처리기사 실기(산업기사 포함) 120쪽 문제46번 질문
도서
2017 시나공 정보처리기사 실기(산업기사 포함) 특별개정판
페이지
120
조회수
46
작성일
2018-09-26
작성자
탈퇴*원
첨부파일

밤새 예상문제은행 풀다보니 술술 잘 풀려서 좋다싶다가 갑자기 혼란이 오기 시작했습니다....ㅠ^ㅠ

봐주세요!

문제46) for (j = 4; j >= 0; -j)

for (i = 4; i > j; -i)

numAry[j] += numAry[i];

j = 4 , j 가 0보다 작으니 1감소 되어서 j = 3 이 되고,

그안의 for문으로 들어가

i = 4 여기서 .. i가 j보다 크니까 ( i(4) > j(3) ) 1감소되어서 i = 3 이 되어...

현재 j = 4 , i = 3 이 되는것 아닌지... 그리고 바로 밑의 numAry[j] += numAry[i]; 실행..

해설집에는 i가 4고, i가 j보다 크니까 for문 안으로 바로 들어가서

for문이 실행되는 것 같은데..

/

다른 문제와 비교했을 때,,..... (114쪽 문제34번)

for (i = 1; i <= 5; ++i, hap =+ i)

system.out.printf("출력문생략");

여기서는 i이 1 , 그리고 i가 5보다 작으니 i를 증가 시키고!!! hap 누적 후, system.out.printf 출력문을 바로 실행했어요.

/

for(int k = 0; k <= n; k++{

생략;

}

이 for문에서는 k가0 이고 k가 n보다 작을때까지 실행하라.

그래서 k=0 으로 시작해서 그 다음 문장을 실행하고 다시 반복할 때,

k가 1로 증가해서 또 들어가고... 이렇게 되길래

이 위의 문제for (i = 1; i <= 5; ++i, hap =+ i) 와 헷갈려서 ... 비교해보니 ++i vs k++ 후증가 선증가 의 차이점인가 싶더라구요.

for문에서 따로 이 개념에 대해선 안배운거같은데 ㅠ.ㅠ

혹시 이것과 상관있는건지요...?????;;

넘 헷갈려요 긴 글이지만.. 도와주세요.... 그만큼 간절합니당..ㅠ_ㅠ감사해요

답변
2018-09-27 21:36:14

안녕하세요. 길벗 수험서 운영팀입니다.

음.. 어떤 것을 설명해드려야 하는지 정확히 파악이 안됩니다.

먼저 마지막에 말씀하신 ++i, k++ 전치수식과 후치수식은 문제와 무관합니다.

전치수식과 후치수식이 영향을 주는 것은 한 수식 내에서 활용될 때 뿐입니다.

34번 문제(114쪽)를 바탕으로 for문을 정확히 이해하고 넘어가세요.

for(①; ②; ③) {

④;

}

위의 for문이 ④를 3회 반복한다고 가정했을 때, 순서는

1회 : ①, ②(조건 참), ④, ③

2회 : ②(조건 참), ④, ③

3회 : ②(조건 참), ④, ③

4회 : ②(조건 거짓) <탈출>

이것을 34번 문제에 적용한다고 가정했을 때,

①은 i=1, ②는 i<=5 ③은 ++i와 hap+=i, ④는 System.out.printf("합은%d %4d입니다.\n", i, hap); 입니다.

1. i에 1을 저장합니다.(초기값 적용)

2. i<=5를 비교합니다.(종료값 비교 후 조건이 맞으므로)

3. i, hap을 출력합니다.(반복문 수행)

4. ++i, hap+=i를 수행합니다.(증가값 적용)

5. 2~4번 과정을 반복합니다.(종료값 비교 후 조건이 맞는 동안 반복문 수행)

----------------------------------------------

이제 46번 문제를 두고 보겠습니다.

for (j = 4; j >= 0; --j)

for (i = 4; i > j; --i)

numAry[j] += numAry[i];

for(j)는 4부터 1씩 줄어들며, 4 3 2 1 0 이렇게 5회 반복합니다.

for(i)는 j의 회전 수 마다,

j i

4 0회

3 1회(4)

2 2회(4, 3)

1 3회(4, 3, 2)

0 4회(4, 3, 2, 1)

이렇게 반복하게 되겠네요.

물론 for(i)의 반복횟수 만큼 아래의 numAry[j] += numAry[i];를 수행하게 되겠으나, 이것은 각 수를 대입하면 간단히 해결되는 문제입니다.

추가적인 의문점이 있는 경우, 해당 의문을 구체적으로 질문해 주세요.

질문이 명확할 수록 정확한 답변이 가능합니다.

행복한 하루되세요.^^

  • *
    2018-09-27 21:36:14

    안녕하세요. 길벗 수험서 운영팀입니다.

    음.. 어떤 것을 설명해드려야 하는지 정확히 파악이 안됩니다.

    먼저 마지막에 말씀하신 ++i, k++ 전치수식과 후치수식은 문제와 무관합니다.

    전치수식과 후치수식이 영향을 주는 것은 한 수식 내에서 활용될 때 뿐입니다.

    34번 문제(114쪽)를 바탕으로 for문을 정확히 이해하고 넘어가세요.

    for(①; ②; ③) {

    ④;

    }

    위의 for문이 ④를 3회 반복한다고 가정했을 때, 순서는

    1회 : ①, ②(조건 참), ④, ③

    2회 : ②(조건 참), ④, ③

    3회 : ②(조건 참), ④, ③

    4회 : ②(조건 거짓) <탈출>

    이것을 34번 문제에 적용한다고 가정했을 때,

    ①은 i=1, ②는 i<=5 ③은 ++i와 hap+=i, ④는 System.out.printf("합은%d %4d입니다.\n", i, hap); 입니다.

    1. i에 1을 저장합니다.(초기값 적용)

    2. i<=5를 비교합니다.(종료값 비교 후 조건이 맞으므로)

    3. i, hap을 출력합니다.(반복문 수행)

    4. ++i, hap+=i를 수행합니다.(증가값 적용)

    5. 2~4번 과정을 반복합니다.(종료값 비교 후 조건이 맞는 동안 반복문 수행)

    ----------------------------------------------

    이제 46번 문제를 두고 보겠습니다.

    for (j = 4; j >= 0; --j)

    for (i = 4; i > j; --i)

    numAry[j] += numAry[i];

    for(j)는 4부터 1씩 줄어들며, 4 3 2 1 0 이렇게 5회 반복합니다.

    for(i)는 j의 회전 수 마다,

    j i

    4 0회

    3 1회(4)

    2 2회(4, 3)

    1 3회(4, 3, 2)

    0 4회(4, 3, 2, 1)

    이렇게 반복하게 되겠네요.

    물론 for(i)의 반복횟수 만큼 아래의 numAry[j] += numAry[i];를 수행하게 되겠으나, 이것은 각 수를 대입하면 간단히 해결되는 문제입니다.

    추가적인 의문점이 있는 경우, 해당 의문을 구체적으로 질문해 주세요.

    질문이 명확할 수록 정확한 답변이 가능합니다.

    행복한 하루되세요.^^

· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.