본문 바로가기
컴퓨터/백준 문제풀이

1302 베스트셀러, 1668 트로피진열, 1236 성 지키기

by 하링아 2020. 9. 23.
반응형

1302 베스트셀러

test_case = int(input()) # 딕셔너리를 이용해서 각 책을 얼마나 구입했는지 확인
books = {}
for _ in range(test_case):
	book = input()
	if book in books:
		books[book] += 1
	else:
		books[book] = 1

target = max(books.value()) # 제일 많이 판매된 값 
array = []

for book, number in books.items(): # 제일 많이 판매된 값의 책 이름 리스트 뽑기
	if number == target:
		array.append(book)
		
print(sorted(array)[0]) # 정렬해서 첫번째 값 추출

얻은 것

- max() 함수 활용

- dict.items() 를 통해 key, value 한 번에 추출 가능

- sorted() 활용

 

1668 트로피진열

# 첫번째 풀이
n = int(input())

left = 0
right = 0
trophys = []

for _ in range(n): # 트로피 나열 리스트 생성
	trophys.append(int(input()))

maxheight = max(trophys)
minheight = 0

for i in range(n): # 왼쪽에서 보기
	if trophys[i] > minheight:
		left += 1
		if trophys[i] == maxheight:
			break
		minheight = trophys[i] 
	
minheight = 0
		
for i in range(n-1, -1, -1): # 오른쪽에서 보기
	if trophys[i] > minheight:
		right += 1
		if trophys[i] == maxheight:
			break
		minheight = trophys[i]
		
print(left)
print(right)

# 두번째 풀이
def ascending(array): # 오름차순 함수 만들기
	now = array[0]
	result = 1
	for i in range(1, len(array)):
		if now < array[i]:
			reuslt += 1
			now = array[i]
	return result
	
n = int(input())
array = []

for _ in range(n): # 트로피 나열 리스트
	array.append(int(input()))
	
print(ascending(array)) # 왼쪽에서 봤을 때
array.reverse() # 리스트 뒤집기
print(ascending(array)) # 오른쪽에서 봤을 때

얻은 것

- 반복되면 함수 만들기

- 반복문에서 안되면 함수로 만들면 쉬움

 

1236 성 지키기

n, m = map(int, input().split()) 
array = []

for _ in range(n): # 성 행렬 받기
	array.append(input())
	
row = [0] * n # 행
col = [0] * m # 열

for i in range(n): # 행과 열에 각각 경비원 표시
	for j in range(m):
		if array[i][j] == 'X':
			row[i] = 1
			col[j] = 1
			
row_count = 0 # 행에 필요한 경비원 수
for i in range(n):
	if row[i] == 1:
		row_count += 1
		
col_count = 0 # 열에 필요한 경비원 수
for i in range(m):
	if col[i] == 1:
		col_count += 1
		
print(max(row_count, col_count)) # 더 많은 쪽으로 추출

얻은 것

- 처음에 n, m 받을 때 map 안 써서 에러 남.. map 꼭 사용

- 분리해서 생각하기도 해야 함 (행과 열)

 

반응형

댓글