우당탕탕 개발일지

[반복문] Softeer level 2 연탄의 크기 (Python 파이썬) 본문

알고리즘

[반복문] Softeer level 2 연탄의 크기 (Python 파이썬)

민아당긴아 2024. 3. 15. 10:36

💡문제 링크

 

Softeer - 현대자동차그룹 SW인재확보플랫폼

 

softeer.ai

💡문제 분석 요약

산타가 연탄을 모든 집에 배달하려고 하는데, 난로의 크기가 문제다.

난로의 반지름이 연탄의 반지름의 배수여야 그 집에 연탄을 배달할 수 있다.

최대한 많은 집에 연탄을 배달하고자 한다. 연탄을 배달할 수 있는 집 개수의 최댓값을 구하는 문제.

<입력값>

n: 집의 개수(1 <= n <= 100)stove: 각 집의 난로의 반지름에 대한 정보(2 <= 반지름 <= 100)<출력값>

연탄을 배달할 수 있는 집 개수의 최댓값

 

💡알고리즘 설계

1.

 

💡코드

 

💡 오답 풀이

1. 정렬을 안 했다.

import sys

n = int(input())
stove = list(map(int, input().split()))
answer = []
for r in range(stove[0], stove[-1] + 1):
    a = 0
    for s in stove:
        if s % r == 0:
            a += 1
    answer.append(a)
print(max(answer))

맨 처음에 제출했던 풀이. 예시로 제시된 데이터에는 난로의 반지름 정보가 오름차순으로 정렬되어있어서 몰랐는데,

'정렬되어 있다'는 조건이 없다. 그래서 sort()로 정렬해줘야한다.

 

2. 반복문의 범위

sort()를 넣었는데, 딱 한가지 케이스만 오답이었다. 도대체 뭐가 문제지..계속 삽질했다. 결국 다른사람의 풀이를 슬쩍 봤는데 반복문의 범위가 range(2, 101)이었다.

나는 연탄 반지름의 최소크기를 난로 반지름의 최솟값이라고 생각했는데, 2일 수도 있다는 걸 놓쳤다. 

예를 들어, 난로의 반지름이 4, 6, 10이라면 이전코드(난로 반지름의 최솟값)의 결괏값은 1이고, 반복문의 범위를 range(2, 101)로 하면 3이다.

 

💡 느낀점 or 기억할정보

1. 반복문의 범위를 잘 설정하자!

2. 예시 데이터만 보고 조건을 놓치지 말자.

3. 실제 코테에서는 여러 케이스 중 몇 개가 오답인지 볼 수 없을테니 내 코드가 모든 데이터의 경우에 잘 작동하는지 보기 어렵겠다.. 극단적인 케이스를 스스로 떠올리며, 그것까지 고려하면서 코드를 짜야한다..