[코딩 테스트] 1일차.

Hayoon·2022년 6월 26일
0

최근, 인프런에서 파이썬 알고리즘 문제풀이 (코딩테스트 대비)강의를 듣고 있다.
"이것이 취업을 위한 코딩테스트다 with python"(나동빈 저자) 책으로 독학하려 했으나 혼자서 하려니
밑바진 독에 물 붓기 마냥 플로우나 로직이 체화되지 않아 (유료)강의의 힘을 빌리기로 했다.

컴퓨터공학 전공자서로 파이썬 기초 문법(선수지식) 파트는 자존심이라 건너뛰었다.
코드 구현력 기르기 부터 하나씩 듣고 있는데 초석을 다지고 실전 알고리즘으로 들어가려고 한다.

매일 5개 문제씩 풀면서 포스팅하려고한다. (지인이 포스팅이라는 단어를 알려줬다... 고마워)

대표값

N = int(input())
a = list(map(int, input().split()))

#avg = round((sum(a)) / N) #round 소수 첫째 자리에서 반올림
avg = int((sum(a) / N) + 0.5)
#print(avg)
arrMin = float('inf')
for idx, x in enumerate(a):
    tmp = abs(avg - x)
    if arrMin > tmp:
        arrMin = tmp
        grade = x
        rank = idx + 1
    elif arrMin == tmp and x > grade:
        arrMin = tmp
        grade = x
        rank = idx + 1

print(avg, rank)

최솟값 구할 경우 arrMin = float('inf')로 무한대의 값을 설정할 수 있다. #INFINITE
for문에서 enumerate를 사용할 경우 인덱스와 값을 동시에 알 수 있다. dictionary{key:value}의 느낌?
*Round() 함수에 대해 새롭게 알게된 사실이다.
round는 round_half_even 방식을 택한다.
round_half_even는 정수 자리가 짝수일 경우 4.500은 4.000으로 내림한다.
a = 66.5
a += 0.5로 표현하면 round() 함수의 짝수내림 문제를 해결할 수 있다.
a = int(a)

K번째 큰 수

N, K = map(int, input().split())
card = list(map(int, input().split()))

#result = []
result = set() #중복 제거
for i in range(0, len(card)):
    for j in range(i+1, len(card)):
        for k in range(j+1, len(card)):
            val = card[i] + card[j] + card[k]
            result.add(val) #set은 append 아니고 add

result = list(result) #set을 list 자료형으로 변경
result.sort(reverse=True)
print(result)
rank = 1

print(result[K - 1])

*list로 중복값을 어떻게 제거할지 고민이었는데 result=set()으로 중복제거가 가능했다.
list.append()처럼 set.add()로 값을 추가할 수 있고, 이후에 result = list(result)로
set을 list 자료형으로 변경도 됐다! (이런 것도 모르고 있다니...)

profile
Junior Developer

0개의 댓글