3중 for문은 처음이니.. 한 번 적어봅세다
https://school.programmers.co.kr/learn/courses/30/lessons/131705
✳️ 3중 for문 코드 풀이
def solution(number):
answer = 0
for i in range(len(number) - 2):
for j in range(i + 1, len(number) - 1):
for k in range(j + 1, len(number)):
if number[i] + number[j] + number[k] == 0:
answer += 1
return answer
🧐 코드의 전체적인 설명
3중 for문을 이용해 3명의 학생을 선택해서 그들이 가진 번호의 합이 0인지 확인 후 0이면(삼총사이면) 카운팅
1️⃣ answer = 0
- 삼총사를 만들 수 있는 방법의 수를 구하기 위해 answer 라는 변수에 0으로 초기화
- 여기에 삼총사를 만들 수 있는 방법이 나오면 1을 카운팅해줄 것
2️⃣ 첫 번째 for문
- 첫 번째 학생을 선택하는 역할 (첫 번째 학생의 번호 인덱스)
🟢 예시로 for문 살짝 뜯어보기
number = [-2, 3, 0, 2, -5]
def solution(number):
answer = 0
for i in range(len(number) - 2): # range(3)
print(i)
solution(number)
출력값 : 0 / 1 / 2
여기서 0, 1, 2 가 첫 번째 학생의 인덱스라고 보면 된다.
3️⃣ 두 번째 for문
- 두 번째 학생을 선택하는 역할 (두 번째 학생의 번호 인덱스)
def solution(number):
answer = 0
for i in range(len(number) - 2): # range(3)
for j in range(i + 1, len(number) - 1): # range(1, 4) / range(2, 4) / range(3, 4)
print(j)
solution(number)
출력값 : 1,2,3 / 2,3 / 3
4️⃣ 세 번째 for문
- 세 번째 학생을 선택하는 역할 (세 번째 학생의 번호 인덱스)
def solution(number):
answer = 0
for i in range(len(number) - 2): # range(3)
for j in range(i + 1, len(number) - 1): # range(1, 4) / range(2, 4) / range(3, 4)
for k in range(j + 1, len(number)): # range(2, 5), (3, 5), (4, 5) / range(3, 5), (4, 5) / range(4, 5)
print(j)
solution(number)
출력값 : 2,3,4 3,4 4 / 3,4 4 / 4
5️⃣ if 조건문
- 세 명의 학생이 가진 번호의 합이 0이 되어 삼총사가 될 수 있는지 없는지 판별
- 만약 삼총사라면 answer에 1 증가
🟢 조건문을 포함한 최종 코드의 작동원리
🟡 첫 번째 반복 (i = 0)
- i = 0 : 첫 번째 학생의 번호는 -2
- j = 1 : 두 번째 학생의 번호는 3
- k = 2 : 세 번째 학생의 번호는 0, 합계 : -2 + 3 + 0 = 1
- k = 3 : 세 번째 학생의 번호는 2, 합계 : -2 + 3 + 2 = 3
- k = 4 : 세 번째 학생의 번호는 -5, 합계 : -2 + 3 + (-5) = -4
- j = 2 : 두 번째 학생의 번호는 0
- k = 3 : 세 번째 학생의 번호는 2, 합계: -2 + 0 + 2 = 0 → 삼총사!
- k = 4 : 세 번째 학생의 번호는 -5, 합계: -2 + 0 + (-5) = -7
- j = 3 : 두 번째 학생의 번호는 2
- k = 4: 세 번째 학생의 번호는 -5, 합계: -2 + 0 + (-5) = -7
- j = 1 : 두 번째 학생의 번호는 3
🟡 두 번째 반복 (i = 1)
- i = 1: 첫 번째 학생의 번호는 3
- j = 2: 두 번째 학생의 번호는 0
- k = 3: 세 번째 학생의 번호는 2, 합계 : 3 + 0 + 2 = 5
- k = 4: 세 번째 학생의 번호는 -5, 합계 : 3 + 0 + (-5) = -2
- j = 3: 두 번째 학생의 번호는 2
- k = 4: 세 번째 학생의 번호는 -5, 합계 : 3 + 2 + (-5) = 0 → 삼총사!
- j = 2: 두 번째 학생의 번호는 0
🟡 세 번째 반복 (i = 2)
- i = 2: 첫 번째 학생의 번호는 0
- j = 3: 두 번째 학생의 번호는 2
- k = 4: 세 번째 학생의 번호는 -5, 합계: 0 + 2 + (-5) = -3
- j = 3: 두 번째 학생의 번호는 2
🟠 if 조건문
- 조건문에 따라 삼총사가 될 수 있는 경우가 2번이었다!
- 삼총사로 판별이 날때 마다 +1을 answer 변수에 더해줌
6️⃣ return answer
- 모든 경우를 확인 한 뒤, answer 값을 반환하여 삼총사를 만들 수 있는 방법의 수를 리턴
# solution 함수 실행
result = solution(number)
# 결과 출력
print(f"삼총사를 만들 수 있는 방법의 수: {result}")
요렇게 코드를 쳐서 확인해보면,
2번이라고 반환되며 출력이 잘 되는 것을 알 수 있었음!
'📒 Today I Learn > 🐍 Python' 카테고리의 다른 글
[Python] 최소 직사각형 (0) | 2024.09.10 |
---|---|
[Python] 크기가 작은 부분 문자열 (0) | 2024.09.09 |
[Python] 대문자 소문자 구분과 확인 (0) | 2024.09.05 |
[Python] 3진법 뒤집기 (직접 구하기, divmod, int) (0) | 2024.09.04 |
[Python] 유클리드 호제법을 이용한 최대공약수와 최소공배수 구하기 (0) | 2024.09.03 |