백준 알고리즘 단계별로 풀어보기 4
- 새로 배운 내용
1) 10818번 - 리스트 내 최소, 최댓값 리턴하는 min(), max() 함수
import sys
a = list(map(int, sys.stdin.readline().split()))
num_list = list(map(int, sys.stdin.readline().split()))
print(min(num_list), max(num_list))
#아래 코드는 min, max 함수 사용하지 않고 반복문으로 구한 것
num_list = list(map(int, sys.stdin.readline().split()))
max = num_list[0]
min = num_list[0]
for i in num_list:
if i > max:
max = i
elif i < min:
min = i
print(min,max)
2) 2562번 인덱싱
import sys
a = list()
for i in range(9):
b = list(map(int, sys.stdin.readline().split()))
a.append(b[0])
max = max(a)
print(max)
print(a.index(max) + 1)
3) 2577번 숫자의 개수
import sys
a = list(map(int, sys.stdin.readline().split()))
b = list(map(int, sys.stdin.readline().split()))
c = list(map(int, sys.stdin.readline().split()))
a = int(a[0])
b = int(b[0])
c = int(c[0])
abc = a * b * c
# count()는 해당 element가 몇 개 있는지 갯수를 리턴해줌
for i in range(0, 10):
cnt = str(abc).count(str(i))
print(cnt)
4) 3052번 나머지 - set 집합 사용하여 중복된 원소 삭제하기
import sys
a = list()
for i in range(0, 10):
b = list(map(int, sys.stdin.readline().split()))
b = b[0]
a.append(b)
c = list()
for i in range(0, 10):
d = a[i]%42
c.append(d)
set_c = set(c)
print(len(set_c))
5) 1546번 - 평균 조작하기
import sys
N = int(input())
scores = list(map(int, sys.stdin.readline().split()))
max = max(scores)
for i in range(N):
scores[i] = scores[i]/max * 100
print(sum(scores)/N)
6) 8958번 (★★★) OX 퀴즈 연속하는 O찾아서 점수 매기기
import sys
# 반복 입력할 케이스 갯수와 케이스 입력하여 리스트에 저장하기
N = int(input())
case_list = list()
for i in range(N):
case = sys.stdin.readline().split()
case = case[0]
case_list.append(case)
for i in range(N):
#케이스 리스트에 담긴 element 하나씩 판별하기
iterator = case_list[i]
count = 0
#하나의 element 길이 만큼 반복하며 점수 매기기
for n in range(len(iterator)):
# X면 continue
if iterator[n] == 'X':
continue
# O면 카운트 +=1
elif iterator[n] == 'O':
count += 1
# 앞에 있는 element들 판별하여 count += 1
for d in range(0, n):
if iterator[n - d - 1] == 'O':
count += 1
#만약 X를 만나면 break
elif iterator[n - d - 1] == 'X':
break
print(count)
# count 출력 후 0으로 초기화 필수!
count = 0
#완전 간결한 식 비교 (출처:https://pacific-ocean.tistory.com/75)
a = int(input())
for i in range(a):
b = input()
s = list(b)
sum = 0
c = 1
for i in s:
if i == 'O':
sum += c
c += 1
else:
c = 1
print(sum)
*코멘트
for문을 돌릴 때, in range가 아니라 in list로 돌릴 수 있다는 점을 간과하고 있었다. 그동안 반복이 몇 번 되느냐에만 초점을 두다 보니 range에 들어갈 숫자만 신경쓰고 있었던 것 같다. 하지만 위와 같이 list안을 iterate하면 훨씬 간결하고, 깔끔하게 코드를 작성할 수 있다.
추가적으로 위의 간결한 코드를 통해 입력받은 값(string)을 list로 형변환 해주면 ['입', '력', '한', '값']과 같이 한글자씩 list에 담기는것 도 알게 되었다!
알고있던 지식만을 활용하여 정답을 출력하기 까지 꽤 오랫동안 고민했던 시간이 허무하게 느껴졌지만, 정답을 출력한 후에 다른 사람이 작성한 더 좋은 코드를 보며 배우는 것도 와닿는 것도 많은 것 같다. ㅎㅇㅌ
7) 4344번 소수점 자리수 표현하기 ( f- string 사용)
- 실패 원인 : range[0]은 점수가 아닌 갯수였는데 이를 사용 // 출력 형식이 잘못되었습니다.
- print(f'{ [변수이름]: .[소수점자리수]f }')
- 뒤의 f 는 float를 의미함
import sys
C = int(input())
score_list = list()
for i in range(C):
score = list(map(int, sys.stdin.readline().split()))
score_list.append(score)
for n in range(len(score_list)):
count = 0
average = (sum(score_list[n]) - score_list[n][0]) / score_list[n][0]
ratio = 0
for d in range(1, score_list[n][0] + 1):
if score_list[n][d] > average:
count += 1
else:
continue
ratio = count / score_list[n][0] * 100
print(f'{ratio:.3f}%')
# 참조 https://ooyoung.tistory.com/62
# 현재 불필요하게 리스트에 담아주는 코드를 작성하여 반복문을 두번 사용함
# 아래와 같이 간결한 방식 공부!
import sys
C = int(input())
for i in range(C):
scores = list(map(int, sys.stdin.readline().split()))
average = sum(scores[1:])/scores[0]
cnt = 0
for score in scores[1:]:
if score > average:
cnt += 1
rate = cnt/scores[0] * 100
print(f'{rate:.3f}%')
*코멘트
이 문제 또한 배열, 리스트 안을 반복하여 도는 iterator를 활용한다면 위와같이 엄청 간결해진다!!
Author And Source
이 문제에 관하여(백준 알고리즘 단계별로 풀어보기 4), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@rlafbf222/백준-알고리즘-단계별로-풀어보기-4저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)