티스토리 뷰
Array1 - 문제풀이 위주
문1: 최빈수 구하기
# 1204. 최빈수 구하기
from collections import Counter
T = int(input())
for test_case in range(1, T + 1):
n = int(input())
counter_list = Counter(list(map(int, input().split())))
max_v = max(counter_list.values())
for k, v in counter_list.items():
if v == max_v:
print(f'#{test_case} {k}')
break
풀이:
특정 자료에서 가장 여러 번 나타나는 값을 출력하는 코드이다. 주어진 특정 자료에서 각 원소의 발생 빈도를 확인하기 위하여 Collections 모듈의 Counter 을 사용하였다.
# Counter 사용 법
from collections import Counter
print(Counter(["hi", "hey", "hi", "hi", "hello", "hey"]))
# result
Counter({'hi': 3, 'hey': 2, 'hello': 1})
문2: View
# 1206. View
T = 10
for test_case in range(1, T + 1):
n = int(input())
buildings = list(map(int, input().split()))
answer = 0
for i in range(2, len(buildings)):
stand = buildings[i]
right = [buildings[i-1], buildings[i-2]]
left = []
if i+2 < len(buildings):
left.append(buildings[i+2])
if i+1 < len(buildings):
left.append(buildings[i+1])
# 검사 오른쪽
check = True
if right:
temp1 = []
temp1.extend(right)
temp1.append(stand)
if max(temp1) != stand:
continue
if left:
temp2 = []
temp2.extend(left)
temp2.append(stand)
if max(temp2) != stand:
continue
max_left = 0 if len(left)==0 else max(left)
max_right = 0 if len(right)==0 else max(right)
answer += min(stand-max_left, stand-max_right)
print(f'#{test_case} {answer}')
풀이:
왼쪽과 오른쪽으로 창문을 열었을 때, 양쪽 모두 거리 2 이상의 공간이 확보될 때 조망권이 확보될 경우 조망권이 확보된 세대의 수를 반환하는 코드이다. 구현문제이기 때문에 풀이가 다양하고 더 나은 풀이가 있을 거라고 생각하지만 우선 나의 접근 방식은 다음과 같다.
✔ 양 옆 두개 씩 살펴 보기
: left, right 리스트에 양 옆 두 개의 값들을 삽입한다.
1) left, right 리스트 둘 다에서 stand 값이 max value 여야 한다. (stand 는 기준 빌딩)
2) stand 값이 max value 인 경우, left, right 리스트 각각에서 stand 값을 제외 한 두 번째 max value 값을 구하여 stand 값에서 뺀다.
3) 둘 중에 작은 값이 조망 권 확보한 세대 이다.
문3: Flatten
T = 10
for test_case in range(1, T + 1):
dump = int(input())
arr = list(map(int, input().split()))
for _ in range(dump):
max_idx = arr.index(max(arr))
min_idx = arr.index(min(arr))
arr[max_idx] -= 1
arr[min_idx] += 1
print(f'#{test_case} {max(arr)-min(arr)}')
풀이:
높은 곳의 상자를 낮은 곳에 옮기는 방식으로 최고점과 최저점의 간격을 줄이는 작업을 평탄화라 한다. 평탄화 작업 횟수 만큼 수행한 후 최고점과 최저점의 차이를 출력하는 코드이다.
'Algorithm > 알고리즘' 카테고리의 다른 글
[이진 탐색] 파라메트릭 서치(Parametric Search) (1) | 2022.11.12 |
---|---|
[SW Intermediate] Tree (2) | 2022.10.05 |
[SW Intermediate] Linked List - 활용 (1) | 2022.10.03 |
[SW Intermediate] Linked List - 정렬 (0) | 2022.10.03 |
[SW Intermediate] Linked List (0) | 2022.10.03 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 파이썬
- 리스트 복사
- 이진탐색
- 스터디
- 프로그래머스강의
- 정렬
- Greedy sort
- https
- 리스트2
- 코드업 기초
- 연결리스트활용
- It
- 이차 리스트
- 자료구조와알고리즘 23강
- CS.
- 운영체제
- 리스트함축
- SW
- CS
- CS 스터디
- 완전탐색
- 네트워크
- 알고리즘
- 리스트
- 자료구조
- 데이터베이스
- 자바
- 프로세스 주소공간
- 프로그래머스
- 보험
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함