인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

ariel123님의 프로필 이미지
ariel123

작성한 질문수

(2025) 일주일만에 합격하는 정보처리기사 실기

비교연산자와 반복문+조건문 문제 풀이 (v2)

이해가안가요...

해결된 질문

작성

·

242

0

  • 이해가 어려운 섹션이나 영상 설명은 질문으로 꼭 남겨주세요.

  • 기출문제를 풀다가 막힌 개념이 있나요? 질문으로 회차나 번호, 개념을 예시로 질문해주세요. 답변에 도움이 됩니다.

  • 이론 문제는 통합본 PDF 파일로 제공될 예정입니다. (6월 중 업로드 예정)

  • 합격을 가르는 것은 역시 코드해석문제. 이론을 외울 시간이 없다면 코드에 익숙해지고, 중요 개념을 몇 가지 외워가면 합격할 수 있습니다.

어디서어디가 적용되는범위고. 세밀했으면졸겠어요 이게참이라서이렇게된다든지. 비교연산자조건문반복문강의 5분에나온느문제. 2읭배수 3의배수. 이론곤알겠는데. 이게. 어떻게. 이프문에서. 나와서. 카운트가언제 증가하는지. 하나도모르겠네요. .설명좀해주세요. .

답변 2

0

ariel123님의 프로필 이미지
ariel123
질문자

네네 감사합니다

0

주말코딩님의 프로필 이미지
주말코딩
지식공유자

안녕하세요.

#include <stdio.h>
int main() {
  int count = 0;

  for (int i = 1; i < 20; i++) {
    if (i % 2 == 0 || i % 3 == 0) {
      if (i % 6 != 0) {
        count++;
      }
    }
  }
  printf("Count: %d\n", count);
  return 0;
}

이 문제 말씀해주신 것으로 생각하고 설명드리겠습니다.

2의 배수 혹은 3의 배수인 것은 이해하셨다고 하니, OR연산자(||)에 대해서는 설명하지 않겠습니다.

 

반복문 안에 조건문, 조건문 안에 다시 조건문이라서 조금 어렵게 보이실 수 있습니다.

주석을 통해서 설명드리겠습니다.

#include <stdio.h>

int main() {
  // count라는 변수를 선언하고 0을 할당
  int count = 0;

  // 1부터 19까지 숫자를 순회 (1 포함, 20 미포함)
  for (int i = 1; i < 20; i++) {
    // 숫자가 2 또는 3으로 나누어 떨어지는지 확인
    if (i % 2 == 0 || i % 3 == 0) {
      // 숫자가 6으로 나누어 떨어지지 않는지 추가로 확인  - (ㄱ) 영역
      if (i % 6 != 0) {
        // 두 조건을 모두 만족하면 카운터를 증가  - (ㄴ) 영역
        count++;
      }
    }
  }

  // 2 또는 3으로 나누어지지만 6으로는 나누어지지 않는 숫자의 최종 개수를 출력
  printf("Count: %d\n", count);
  
  return 0;
}

 

범위를 어디까지인지 알려달라는 말씀은 괄호를 잘 보시면 됩니다.

수 많은 구문이 겹치다보면 괄호가 많아보여서 헷갈릴 수 있는데 차근차근 다음 구문까지 보시면 됩니다.

구문 안 부분을 주석으로 작성해두었습니다. 확인해주세요.

 

주석 중에 (ㄱ)영역 부분과 (ㄴ)영역 부분을 봐주세요.

(ㄱ) 부분은 i가 2로 나누어 떨어지거나 3으로 나누어 떨어지면 (둘 중에 하나라도 해당되면 참이 됩니다.) 저기 안으로 들어가게 됩니다.

그렇지 않으면? 아예 통과합니다. 통과한다는 얘기는 블럭 자체로 들어가지 않기 때문에, 다음 반복문으로 넘어갑니다.

왜 다음 반복문으로 넘어갈까요? 아직 for 전체 블럭이 해소되지 않았기 때문입니다.

지금 블럭의 구조는 이렇게 되어있습니다

for > if > (ㄱ) > if > (ㄴ)

첫번째 if문에 해당되지 않으니까, for에서 다음 반복으로 넘어가겠죠.


영역 설명은 대략적으로 드렸고, 반복문을 처음부터 살펴봅시다.

최초에 숫자 1이 왔습니다. 2로 나눠떨어지지 않고 3도 아니죠. 넘어갑니다.

그 다음에 2가 왔습니다. 어? 2로 나눠떨어지네요. if 1번을 통과하고 (ㄱ)의 영역으로 들어갑니다.

(ㄱ)의 영역에 들어가니까 이제 (ㄴ)의 영역에 들어가기 전에 if문이 또 있습니다.

두 번째 if문은 그 숫자가 6으로 나눴을 때 0 떨어지지 않는 경우에 참이 됩니다. (!=은 같지 않아야지 참이 됩니다.)

지금 2는 6으로 나눴을 때 나머지가 2입니다. 0하고 같지 않습니다. 그래서 참이 되어서 (ㄴ) 영역으로 들어가게 됩니다.

 

이렇게 처음 1부터 19까지 모두 진행합니다.

 

이해에 도움이 되셨을까요?

ariel123님의 프로필 이미지
ariel123

작성한 질문수

질문하기