inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

(2026 최신!) 일주일만에 합격하는 정보처리기사 실기

모의고사 1회

모의고사 1회 3번문제

해결된 질문

116

yundevil

작성한 질문수 6

0

강의좀 올려주세여.ㅠㅠ

이해안가는 부분이 너무 명확해여.

그래서 오히려 이문제는 다른 문제까지 헷갈리게 만드는거같아여.

이문제를 푸는 사람들이면 같은 생각할꺼입니다.

그리고 자료 pdf 는 단어 검색이 안돼서. 궁금한

파트를 명시적으로 찾기가 어려워요.

python java c 정보처리기사 정보처리산업기사

답변 3

0

주말코딩

안녕하세요, 해당 문제는 리스트라는 것이 하나의 객체라는 것을 인식해야합니다.


핵심 개념 중 하나인 가변 기본값(mutable default argument)에 대해서 설명드립니다.

def build(v, bucket=[]):

이 코드에서 bucket=[]는 함수를 호출할 때마다 새로 만들어지는 것이 아닙니다. def build(...)라는 문장이 실행되는 시점, 즉 함수가 정의되는 순간에 []가 딱 한 번만 생성됩니다. 이후 bucket 인자를 넘기지 않고 호출하면, 그때마다 새 리스트가 아니라 이미 만들어진 그 하나의 리스트를 계속 재사용합니다.

비유하자면, 선생님이 책상에 분필 통 하나를 놔두고 "분필 없으면 이거 쓰라"고 한 것과 같습니다. 학생들은 각자 새 통을 받는 게 아니라 모두 같은 통을 공유합니다. 한 학생이 통에 분필을 넣고 가면, 다음 학생이 왔을 때도 그 통에는 그 분필이 그대로 들어있습니다.

또한 리스트 변수는 값 자체가 아니라 리스트라는 상자를 가리키는 이름표와 같습니다. 따라서 bucket 인자를 생략하고 호출한 결과를 받는 변수들은 모두 같은 상자를 가리키는 서로 다른 이름표일 뿐입니다. 반면 build(7, [])처럼 직접 새 리스트를 넘기면, 그것은 기본값 상자와 무관한 완전히 별개의 새 상자가 됩니다.

한 줄씩 추적

a = build(2) 기본 상자(처음엔 빈 리스트)를 사용합니다.

  • item = [2]

  • bucket이 비어있으므로 if bucket은 거짓 → extend 실행 안 됨

  • bucket.append(item) → 기본 상자는 [[2]]가 됨

  • a는 이 기본 상자를 가리킴

b = build(5) 같은 기본 상자(현재 [[2]])를 다시 사용합니다.

  • item = [5]

  • bucket이 비어있지 않으므로 if bucket은 참

  • bucket[-1]은 [2] → 마지막 원소는 2

  • len(bucket)은 1

  • item.extend([2, 1]) → item = [5, 2, 1]

  • bucket.append(item) → 기본 상자는 [[2], [5, 2, 1]]

  • b도 같은 기본 상자를 가리킴

c = build(7, []) 새 빈 리스트를 직접 넘겼으므로 기본 상자와 무관합니다.

  • item = [7], bucket이 비어있으므로 그대로 append

  • c = [[7]] (독립적인 상자)

d = build(3) 다시 기본 상자(현재 [[2], [5, 2, 1]])를 사용합니다.

  • item = [3]

  • bucket[-1]은 [5, 2, 1] → 마지막 원소는 1

  • len(bucket)은 2

  • item.extend([1, 2]) → item = [3, 1, 2]

  • bucket.append(item) → 기본 상자는 [[2], [5, 2, 1], [3, 1, 2]]

  • d도 같은 기본 상자를 가리킴

결론: a, b, d는 서로 다른 변수처럼 보이지만 실제로는 동일한 상자를 가리키므로, 최종적으로 세 변수 모두 [[2], [5, 2, 1], [3, 1, 2]]를 참조합니다.

출력 계산

print(len(a), sum(a[-1]))a = [[2], [5, 2, 1], [3, 1, 2]]

  • len(a) → 3

  • a[-1] = [3, 1, 2], sum → 6 → 3 6

print(len(c), c[0][0])c = [[7]]

  • len(c) → 1

  • c[0][0] → 7 → 1 7

print(sum(sum(x) for x in d))d = [[2], [5, 2, 1], [3, 1, 2]]

  • sum([2]) = 2

  • sum([5, 2, 1]) = 8

  • sum([3, 1, 2]) = 6

  • 총합: 2 + 8 + 6 = 16 → 16

최종 출력

3 6
1 7
16

참고

실무에서는 이런 예상치 못한 공유 상태를 방지하기 위해 가변 객체를 기본값으로 직접 쓰지 않고, 다음과 같이 작성하는 것이 일반적입니다.

def build(v, bucket=None):
    if bucket is None:
        bucket = []
    ...

0

yundevil

감사합니다, 이해가 된거같아여.ㅠㅠ낼시험인데. 이해안가는 문제가 생기면 뭔가 불안..

0

yundevil

그럼 모의고사 1회 3번 문제 관련 강의는

커리큘럼 몇번일까여?

0

인프런 AI 인턴

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

모의고사 관련하여 이해가 어려운 부분이 있다고 하셔서 강의 자료 및 PDF 자료의 검색성에 대해 문의 주셨네요. 모의고사 문제 해결은 기본 개념 숙지 후에 문제 풀이가 필요하므로, 강의에서 강조된 부분을 중점적으로 복습하시면 이해가 좀 더 수월할 수 있습니다.

아래 유사한 질문과 답변들을 확인하여 강사님께서 제공하신 팁과 자료 제공 여부 등 도움이 될 만한 정보를 안내드립니다.

  1. 안녕하세요^^ 오늘 수강신청 했습니다.

    • 이 답변에서는 PDF 자료 제공에 대한 강사님의 안내를 확인할 수 있습니다. 역시, 상세 내용을 PDF로 제공하며 검색 기능이 부족할 수 있지만, 강사님은 자료의 시각화 및 정리를 통해 문제 해결을 돕고자 합니다.
  2. 이론 문제 학습하기_파일로

    • 이론 문제의 파일 제공에 대한 요청 및 강사님의 준비 계획에 대한 정보를 받으실 수 있습니다. 이론과 요약 내용도 함께 준비하고 있음을 언급하고 있습니다.

자료의 검색성 향상을 위해 키워드별로 앞서 설명한 강의 포인트를 노트에 따로 정리하시는 것도 유익할 수 있습니다. PDF의 경우, 현재 제공된 자료가 관련 키워드와 함께 잘 연계될 수 있도록 강사님께 추가적인 개선 요청을 해보시면 좋겠습니다.

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

배열 포인터 출력 표시

0

19

1

포인터 증감 또는 값 증감

0

17

1

배열 포인터 함수 관련

0

17

1

실기 이론 통합 요약본 버전

0

23

1

업캐스팅 3번 문제 예시

0

29

2

push pop 설명 되어있는 강의가 몇강인가요?

0

46

1

모의고사 파일오류

1

76

3

모의고사 다운

0

52

1

업캐스팅 원칙

0

65

2

6분46초

0

57

2

공략법

0

65

1

모의고사 파일과 이론파일 업데이트

1

74

3

이론 pdf 다운은 어디서 하나요?

0

72

2

13분 40초

0

64

2

정보처리기사 26년 실기 2회 네트워크 부분

0

77

2

기출문제 재탕

0

57

1

뻬먹은 코드

0

47

1

기출문제 재탕

0

37

0

모의고사1회 2번문제 뭔지 모르겠네요 강의올려주시면안될까요?

0

51

1

영상 다운로드는 안되나요?

0

81

1

26년2회 실기기출은 언제쯤...

0

126

2

이론 공부법 요약본 버전 업데이트 문의

0

108

2

정처기 필기 준비할때 이 이론을 다시 외워도 될까요?

0

115

2

조건 반복문 질문: for 문 ?

0

92

1