강의

멘토링

로드맵

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

HongChan Ahn님의 프로필 이미지
HongChan Ahn

작성한 질문수

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

(기출) 2023년 2회 코드해석 문제

23년 2회 C언어 1번 문제 질문 있습니다.

해결된 질문

작성

·

15

0

  • 질문은 동영상 강의에 들어가서 오른쪽에 커뮤니티 버튼을 통해 해주세요. 그래야

    어떤 강좌에서 질문하셨는지 알 수 있습니다.

  • 영상에서 몇 분 몇 초 대를 알려주셔야 제가 한 번에 질문 내용 확인이 가능합니다.

  • 이미 다른 누군가가 질문을 한 이력이 있을 수 있습니다. 질문 게시판을 한 번 확인 부탁 드립니다.

  • 학교의 과제나 타 강사의 코드 등 외부 수업 자료에 대해서는 답변하지 않습니다.

  • 제가 다루는 커리큘럼 외의 이론이나, 너무 디테일한 컴퓨터 이론에 대해서는 답변 드리지 않습니다.

    • 시험에 안 나오는 경우가 많고, 나와 봤자 1문제 나오는데 외워야 할 부분이 많은 것 등 (예시: 서브넷 마스크 계산)

  • 질문을 올릴 때 이 글은 모두 지우고 내용을 입력해주세요.

2년 2회 C언어 영상 시작할 때 나온 문제에 대한 질문입니다.

입력값이 5,4,3,2,1로 들어왔으므로
n= { 5, 4, 3, 2, 1}이 되는 것은 이해했습니다.
다만 출력이 43215로 나오려면

index를 한 칸씩 앞으로 땡겨야한다고 생각해서

n[(i+4)%5]로 진행하였는데 왜 실제 답은 n[(i+1)%5]가 되는 지 궁금합니다
해설대로 푼다면 오히려 답은 15432로 나와야하지 않나?라는 생각이 듭니다.

답변 2

0

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

안녕하세요,

제일 좋은 답변은 n[(i+1)%5]로 해보고, n[(i+4)%5]로 해서 비교해서 보여드리는 것이라 생각합니다.

배열의 인덱스와 값을 먼저 보여드리고 시작하겠습니다.

입력값: 5, 4, 3, 2, 1

  • n[0] = 5

  • n[1] = 4

  • n[2] = 3

  • n[3] = 2

  • n[4] = 1


 

우리가 원하는 출력은 4, 3, 2, 1, 5입니다.

이렇게 되려면 다음 순서로 배열을 출력해야합니다.

n[1], n[2], n[3], n[4], n[0]

 

우리가 알고 있는 정답으로 검증을 해봅시다.

  • i=0일 때: (0+1)%5 = 1 → n[1] = 4 ✓

  • i=1일 때: (1+1)%5 = 2 → n[2] = 3 ✓

  • i=2일 때: (2+1)%5 = 3 → n[3] = 2 ✓

  • i=3일 때: (3+1)%5 = 4 → n[4] = 1 ✓

  • i=4일 때: (4+1)%5 = 0 → n[0] = 5 ✓

출력: 43215

 


질문 주신 코드를 넣으면 아래처럼 됩니다.

n[(i+4)%5]를 사용하면 다음과 같이 동작합니다:

  • i=0일 때: (0+4)%5 = 4 → n[4] = 1

  • i=1일 때: (1+4)%5 = 0 → n[0] = 5

  • i=2일 때: (2+4)%5 = 1 → n[1] = 4

  • i=3일 때: (3+4)%5 = 2 → n[2] = 3

  • i=4일 때: (4+4)%5 = 3 → n[3] = 2

출력: 15432

 

값과 인덱스를 헷갈리지 않도록 위 처럼 하나씩 적어보면 확실히 무엇이 다른 지를 알 수 있습니다.

 

질문에 작성하셨던 n[(i+4)%5]는 배열을 오른쪽으로 4칸 회전시킨 것과 같은 효과를 내기 때문에 첫 번째 요소부터 마지막에서 시작하여 역순으로 접근하게 됩니다.

 

반면 우리가 원하는 것은 왼쪽으로 1칸 회전시킨 주어진 출력값인 43215이므로 n[(i+1)%5]가 정답입니다.

 

추가로, 질문자님께서 올리신 코드를 직접 돌려본 결과입니다.

image.png

 

HongChan Ahn님의 프로필 이미지
HongChan Ahn
질문자

제가 질문을 살짝 착각했더라고요 감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. HongChan Ahn님.

질문 주신 내용에 대해 설명드리겠습니다. 주어진 문제에서 입력 값이 {5, 4, 3, 2, 1}이라는 것은 이해하셨고, 이제 출력이 43215가 나오기 위해서는 배열의 인덱스를 조작해야 하는 상황입니다.

n[(i+1)%5] 연산은 배열의 요소를 순환 형태로 접근할 수 있게 해줍니다. 이를 통해 현재 인덱스 i에서 하나씩 앞으로 이동하는 효과를 줄 수 있습니다. 예를 들어, 다음 순서로 계산됩니다:
- i = 0일 때, (0+1)%5 = 1이므로 n[1] = 4
- i = 1일 때, (1+1)%5 = 2이므로 n[2] = 3
- i = 2일 때, (2+1)%5 = 3이므로 n[3] = 2
- i = 3일 때, (3+1)%5 = 4이므로 n[4] = 1
- i = 4일 때, (4+1)%5 = 0이므로 n[0] = 5

이로 인해 결과적으로 순환 형태의 출력값 43215를 얻게 됩니다.

질문자님의 접근 방식인 n[(i+4)%5]는 생각한 것과 다르게 동작할 수 있는데 이는 실제 나머지 연산의 순환 속성 때문입니다. 두 접근방식이 조금 다르게 배열 접근 순서를 결정하기 때문입니다.

이와 관련된 유사한 질문이 다음 URL에 있으니 참고하시면 이해에 도움이 될 것입니다:
- 23년 2회 첫번째문제 질문: 이 질문에서는 모듈로 연산과 관련된 논의가 포함되어 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

HongChan Ahn님의 프로필 이미지
HongChan Ahn

작성한 질문수

질문하기