240629 TIL #438 파이썬 코딩테스트 연습

김춘복·2024년 6월 28일
0

TIL : Today I Learned

목록 보기
438/543
post-custom-banner

Today I Learned

오늘은 파이썬에 익숙해지기 위해서 파이썬으로 간단하게 코테를 여러문제 풀어보았다. 구름 이라는 플랫폼에서 코테를 연습했다.


1. 큰 수식 찾기

+, -, * 로 구성된 수식 A, B가 주어진다. 각 수식을 연산자 우선순위에 따라 계산했을 때, 두 수식의 계산 결과 중 더 큰값을 출력해라

코드 및 풀이방법

  • 하나 하나 구현하면 매우 복잡해지지만, 파이썬에서는 문자열로 된 파이썬 표현식을 실제 파이썬 코드처럼 실행할 수 있게 해주는 eval() 함수가 존재한다. 이를 이용해서 해결하면 된다.
a, b = input().split()
print(max(eval(a), eval(b)))

2. 정사각형의 개수

한 변의 길이가 N인 정사각형 격자판이 있다. 각 격자의 길이가 1일때 이 격자판의 크고 작은 정사각형의 개수는?

코드 및 풀이방법

  • 간단한 수학문제로 변의 길이가 1이면 n n개, 2면 (n-1) (n-1)개가 되는 규칙성을 가지고 있다. 이를 이용해서 반복문으로 풀어주면 된다.
n = int(input())
result = 0
for i in range(0,n):
	result += (n-i) * (n-i)

print(result)

3. 이진수 정렬

N개의 10진수 정수가 주어지는데 이를 2진수로 나타냈을 때 1의 개수를 기준으로 내림차순하고, 순서가 같다면 원래 10진수를 기준으로 내림차순 정렬해라. 그때 앞에서 k번째 위치한 수를 반환해라.

코드 및 풀이법

  • n, k, 리스트를 map(int, input().split())으로 받아준다.

  • 리스트 컴프리헨션을 이용해서 각 숫자에 대해 (1의 개수, 원래 숫자) 튜플을 생성해 리스트를 만들어준다.

  • sorted() 함수를 이용해 정렬을 하는데, 정렬 기준(key)을 lambda를 이용해서 -x[0](1의 개수 기준 내림차순), -x[1](원래 숫자 기준 내림차순) 정렬을 시켜준다.

  • 마지막으로 k번째(k-1) 원래 수를 반환하면 완료

n, k = map(int, input().split())
nums = list(map(int, input().split()))

nums_with_one_counts = [(bin(num).count('1'), num) for num in nums]

sorted_nums = sorted(nums_with_one_counts, key=lambda x: (-x[0], -x[1]))

print(sorted_nums[k-1][1])
profile
Backend Dev / Data Engineer
post-custom-banner

0개의 댓글