카테고리 없음

글쓰기 45일차

yoon000219 2026. 7. 20. 20:59

문제 설명

한국중학교에 다니는 학생들은 각자 정수 번호를 갖고 있습니다. 이 학교 학생 3명의 정수 번호를 더했을 때 0이 되면 3명의 학생은 삼총사라고 합니다. 예를 들어, 5명의 학생이 있고, 각각의 정수 번호가 순서대로 -2, 3, 0, 2, -5일 때, 첫 번째, 세 번째, 네 번째 학생의 정수 번호를 더하면 0이므로 세 학생은 삼총사입니다. 또한, 두 번째, 네 번째, 다섯 번째 학생의 정수 번호를 더해도 0이므로 세 학생도 삼총사입니다. 따라서 이 경우 한국중학교에서는 두 가지 방법으로 삼총사를 만들 수 있습니다.

한국중학교 학생들의 번호를 나타내는 정수 배열 number가 매개변수로 주어질 때, 학생들 중 삼총사를 만들 수 있는 방법의 수를 return 하도록 solution 함수를 완성하세요.

 

def solution(number):
    answer = 0
    n = len(number)

    for i in range(n - 2):          # 첫 번째 학생
        for j in range(i + 1, n - 1):   # 두 번째 학생
            for k in range(j + 1, n):   # 세 번째 학생

                if number[i] + number[j] + number[k] == 0:
                    answer += 1

    return answer

 

문제 이해

학생들의 번호가 담긴 배열에서 학생 3명을 선택했을 때 번호의 합이 0이 되는 경우의 수를 구하는 문제이다.

예시

 
number = [-2, 3, 0, 2, -5]
 

학생 번호를 표로 나타내면

인덱스번호
0 -2
1 3
2 0
3 2
4 -5

여기서 학생을 3명씩 선택하여 합이 0인지 확인하면 된다.


풀이 아이디어

학생 3명을 모두 선택해야 하므로

  • 첫 번째 학생
  • 두 번째 학생
  • 세 번째 학생

을 하나씩 선택하면서 모든 경우를 검사한다.

이를 위해 3중 반복문을 사용하였다.


풀이 과정

1. 첫 번째 학생 선택

 
for i in range(n-2):
 

i는 첫 번째 학생이다.

처음에는

 
i = 0
 

이므로

첫 번째 학생 = -2
 

를 선택한 상태이다.


2. 두 번째 학생 선택

 
for j in range(i+1, n-1):
 

여기서 가장 많이 헷갈린다.

j는 두 번째 학생이다.

 

그런데 왜 i+1부터 시작할까?

이미 첫 번째 학생으로 i를 선택했기 때문이다.

예를 들어

 
i = 0
 

이면

첫 번째 학생 = -2
 

이다.

그러면 두 번째 학생은

3
0
2
-5
 

중에서 골라야 한다.

그래서

 
j = 1, 2, 3, 4
 

가 된다.

즉,

 
for j in range(i+1, n-1)
 

첫 번째 학생 다음 사람부터 두 번째 학생을 선택한다.

라는 의미이다.


3. 세 번째 학생 선택

 
for k in range(j+1, n):
 

이번에는 k가 세 번째 학생이다.

이미

첫 번째 학생
두 번째 학생
 

을 골랐으므로

세 번째 학생은 두 번째 학생 뒤에서만 선택한다.

예를 들어

 
i = 0
j = 2
 

이라면

현재 선택된 학생은

-2
0
 

이다.

세 번째 학생은

2
-5
 

중에서만 선택한다.

 
k = 3, 4
 

가 된다.


실제 반복되는 모습

처음에는

i=0
j=1
k=2
 

선택된 학생

-2
 3
 0
 

1
 

0이 아니므로 다음 경우를 확인한다.


다음은

i=0
j=1
k=3
 

선택

-2
3
2
 

3
 

다음으로 넘어간다.


다음은

i=0
j=2
k=3
 

선택

-2
0
2
 

0
 

 
answer += 1
 

을 수행한다.


왜 i+1, j+1을 사용할까?

만약

 
for j in range(n):
 

처럼 작성하면

(-2, 3, 0)
 

도 검사하고

(3, -2, 0)
 

도 검사한다.

사실 이 둘은 같은 학생 3명이다.

즉,

(-2,3,0)
(3,-2,0)
(0,-2,3)
 

을 모두 세게 되어 중복 계산이 발생한다.

그래서

첫 번째 학생 < 두 번째 학생 < 세 번째 학생
 

순서가 되도록

 
j = i+1
k = j+1
 

부터 시작하는 것이다.

 

📌 오늘의 학습 주제

Tableau 데이터 연결(Relationship) 및 Dashboard 구성


🎯 핵심 내용 요약

오늘은 Tableau Desktop을 활용하여 CSV 파일을 연결하고 대시보드를 제작하는 과정을 학습하였다.

단순히 데이터를 불러오는 것이 아니라 Relationship(관계)Join(조인) 의 차이를 이해하고, 여러 CSV 파일을 하나의 분석 데이터로 연결하는 방법을 익혔다.

또한 Dashboard를 구성하면서 레이아웃(Container)시트(Worksheet) 의 차이, 크기 조정, 제목 및 범례 관리 방법을 실습하였다.


💡 오늘 배운 핵심 포인트

① Relationship과 Join의 차이

RelationshipJoin
논리적 연결 물리적 연결
분석 시 필요한 순간에 결합 데이터를 미리 하나로 합침
중복 발생이 적음 중복 데이터 발생 가능

✔ 대부분의 Dashboard 제작에서는 Relationship 사용을 권장한다.


② 데이터 연결 시 확인해야 할 사항

  • 공통 Key(Column)가 존재하는지 확인
  • 데이터 타입이 동일한지 확인
  • 컬럼명이 서로 일치하는지 확인
  • Null 값이 존재하는지 확인

예)

Vehicle ID
↓

Vehicle ID
 

또는

Shape ID
↓

Shape ID
 

처럼 동일한 Key가 있어야 연결 가능하다.


③ Dashboard 구성 요소

Dashboard는 단순히 차트를 붙이는 공간이 아니라

  • Worksheet
  • Container
  • Legend
  • Filter
  • Text
  • Image

등 여러 객체를 조합하여 제작된다.


④ Container의 역할

Container는

  • 그래프 위치
  • 간격
  • 정렬

을 관리하는 객체이다.

Container를 삭제하면 레이아웃이 크게 변경될 수 있으므로 삭제보다 배치 수정이 중요하다.


⑤ Dashboard 크기 설정

Dashboard에서는

Automatic
 

보다

Fixed Size
 

를 사용하는 것이 화면 비율을 일정하게 유지하는 데 유리하다.

예)

1000 × 800
 

📝 오늘 겪었던 문제

❗ CSV 연결이 되지 않는 문제

원인 후보

  • 공통 Key 없음
  • 데이터 타입 불일치
  • 잘못된 Relationship 생성
  • 다른 Data Source로 연결됨

→ 데이터 연결 시에는 항상 공통 컬럼부터 확인하는 습관이 필요하다는 것을 알게 되었다.


❗ Dashboard 레이아웃 문제

Container를 삭제하면

  • 차트 크기 변경
  • 위치 변경
  • 전체 레이아웃 붕괴

가 발생하였다.

→ Dashboard에서는 객체보다 Container 구조를 먼저 이해해야 한다.


📚 새롭게 알게 된 용어

용어의미
Relationship 논리적 테이블 연결
Join 물리적 데이터 결합
Dashboard 여러 시트를 조합한 화면
Worksheet 개별 시각화
Container 레이아웃 관리 객체
Legend 색상·크기 등을 설명하는 범례
Fixed Size 고정 크기 대시보드

🚀 오늘의 인사이트

단순히 차트를 만드는 것보다 데이터를 어떻게 연결하고 구조화하는지가 더 중요하다는 점을 배웠다.

또한 Dashboard는 시각화 도구가 아니라 분석 결과를 효과적으로 전달하기 위한 화면 설계 과정이라는 것을 이해하게 되었다.

앞으로는 데이터를 불러오기 전에 공통 Key와 데이터 구조를 먼저 확인하는 습관을 들이고, Container를 활용해 안정적인 Dashboard를 설계하는 연습을 계속해야겠다.