1차원 배열 문제들을 통해서 list()
와 set()
활용하기라던가, list comprehension, 기타 list함수 등 좀 익숙해 졌다고 생각했다. 8598번과 4344번은 문법의 문제보다는, 해당 알고리즘을 구현하는 것이 핵심이었고 푸는데도 시간이 다소 걸렸다.
'대략 이런 로직이면 될 것 같은데...' 과 같이 rough하게만 접근하면 프로그램은 완성되지 않는다. 계속 생각하고 찾아보면서 처음부터 끝까지 명확하게 작성해야 한다.
OX퀴즈에서 O는 득점이고 X는 0점이다. 그리고 각 O의 점수는 연속된 O의 개수만큼 적용된다. 예를 들어 "OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.
일단 각 O의 점수는 이전 문자가 O냐 X냐에 따라 결정된다. 이전 문자가 O라면 +1이 되고, X면 다시 O의 점수는 1부터 시작한다.
T = int(input())
answer = [input() for i in range(T)] #T번만큼 answer[]를 받는다
for i in range(len(answer)):
total_score = 0 #최종 합산 점수
score = 0 #각 O의 점수
for j in range(len(answer[i])):
if answer[i][j] == "O": #만약 O면 +1
score += 1
total_score += score #최종 합산 점수에 반영
else:
score = 0 #X면 다시 score는 0
print(total_score)
그런데 여기서 total_score()=0
과 score=0
을 for문 바깥으로 보내면 오류다.
T=int(input())
answer = [input() for i in range(T)]
score = 0
total_score = 0
for i in range(len(answer)):
for j in range(len(answer[i])):
if answer[i][j] == "O":
score += 1
total_score += score
else:
score = 0
print(total_score) #잘못된 값이 계산됨!!!
print(total_score)
가 한번 실행되면 total_score
는 0으로 리셋되고 2번째 입력값을 계산하는데, 위와 같이 작성하면 첫 번째 total_score
를 그대로 가지고 if문을 수행하기 때문이다. 즉 total_score()=0
과 score=0
은 계산 초기화를 위해 존재한다. (처음에 이 단순한 로직을 찾아내는데 시간이 걸렸다...^^...)
정답)
OOXXOXXOOO -> 10 출력
OOXXOOXXOO -> 9 출력
오류)
OOXXOXXOOO -> 10 출력
OOXXOXXOOO + OOXXOOXXOO -> 통째로 인식, 25 출력
#4344번
케이스를 먼저 입력하고, 둘째 줄에는 학생 수, 학생 별 점수를 입력한다.
각 케이스마다 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.
입력값에 학생 수와 점수가 같이 포함되어 있기 때문에, 이를 잘 계산해서 평균과 학생 비율을 각각 구하면 된다.
C = int(input())
for i in range(C):
scores = list(map(int,input().split()))
average = sum(scores[1:])/scores[0] #점수끼리 합/학생 수
cnt = 0
for score in scores:
if score > average: cnt += 1
print("%.3f%%" %(cnt/scores[0]*100))
혹은, 학생 수를 scores.pop(0)
으로 아예 분리시켜 작성해도 된다. pop()
을 사용하면 해당 index의 값만 빼낼 수 있고 기존 list에는 해당값이 삭제된다.
C = int(input())
for i in range(C):
scores = list(map(int,input().split()))
n = scores.pop(0) #scores[0] 빼고 scores[]에는 해당 값이 제외된다.
average = sum(scores)/n
cnt = 0
for score in scores:
if score > average:
cnt += 1
print("%.3f%%" %(cnt/n*100))
출처: 백준