1.백준 - 팀 이름 정하기
문제점
https://www.acmicpc.net/problem/1296
https://www.acmicpc.net/board/view/121576
시도해 본 것들
코드 이해하기
name = input()
L, O, V, E = 0, 0, 0, 0
# 연두의 영어 이름 단어 개수 파악
for x in name:
if x == 'L':
L += 1
elif x == 'O':
O += 1
elif x == 'V':
V += 1
elif x == 'E':
E += 1
LOVE = [L, O, V, E]
k = int(input())
maxScore = 0
fTeamName = ''
# 팀 후보 이름 단어 개수 파악
for i in range(k):
teamName = input()
for x in teamName:
if x == 'L':
L += 1
elif x == 'O':
O += 1
elif x == 'V':
V += 1
elif x == 'E':
E += 1
# 점수 계산 공식
score = ((L+O) * (L+V) * (L+E) * (O+V) * (O+E) * (V+E)) % 100
count = 0
# 최고 점수 파악 분기문
if score > maxScore:
fTeamName = teamName
# 점수가 같은 경우 사전순 정렬을 위한 분기문
elif score == maxScore:
for i in range(min(len(teamName), len(fTeamName))):
if ord(teamName[i]) != ord(fTeamName[i]):
if ord(teamName[i]) < ord(fTeamName[i]):
fTeamName = teamName
count = 1
break
# 모든 비교 단어가 일치하지만 길이가 더 긴 게 존재하는 경우 파악
if count == 0:
if len(teamName) < len(fTeamName):
fTeamName = teamName
if fTeamName == '':
fTeamName = teamName
L, O, V, E = LOVE
print(fTeamName)
풀었던 문제였기 때문에 다른 사람의 코드였지만 금방 코드를 확인하고 이해할 수 있었다.
문제 찾기
문제가 발생하는 경우를 찾기위해 예제를 확인해본 결과
예제 1번에서 잘못된 출력을 보여주는 것을 확인
print(score)를 추가한 뒤 확인했을 때
16
64
16
DANO
다음과 같이 64인 FRANK가 정답으로 출력되어야 하지만 DANO가 출력되는 것을 확인할 수 있었다.
해결 방법
확인한 반례를 바탕으로 코드를 다시 살펴보자 현재 코드에서 maxScore를 갱신하지 않기 때문에
score가 1이 넘는다면
if score > maxScore:
fTeamName = teamName
분기문을 진입하고
LOVE
3
JACOB
FRANK
DANO
예제 1번을 입력했을 때 DANO를 출력하는 것을 확인할 수 있었다.
알게 된 점
게시판에서 반례를 찾는 과정이 사실 질문자보다 답변을 하는 사람이 디버깅 과정을 거치고 타인의 코드를 이해하며 크게 성장할 수 있는 기회가 아닐까 싶다.
그리고 내가 공부한 부분으로 다른 사람을 도와줄 수 있다는 점이 장점인 것 같다.
1.세로읽기
문제점
https://www.acmicpc.net/problem/10798
https://www.acmicpc.net/board/view/121612
시도해 본 것들
코드 파악
from sys import stdin as s
# 이중 for문 생성
lst = [s.readline().strip()]
# 총 5번 입력이 존재하므로 for문으로 list 추가
for i in range(4):
lst.append(f'{s.readline().strip():<{len(lst[0])}}')
# list[0]의 길이로 for문 진행
for i in range(len(lst[0])):
# 5번 for문 진행
for j in range(len(lst)):
# 공백이 아니면 출력
if lst[j][i] != " ":
print(lst[j][i], end="")
else:
continue
이 번 코드는 길지 않아서 문제가 발생할 수 있는 부분을 예측할 수 있었다.
해결 방법
입력 :
AABCDD
afzz
09121
a8EWg6
P5h3kxAABCDD
출력 :
Aa0aPAf985Bz1EhCz2W3D1gkD6x
정답 :
Aa0aPAf985Bz1EhCz2W3D1gkD6xAABCDD
현재 코드에서 7번째 줄의 for문 범위 설정이
for i in range(len(lst[0])):
list[0]의 길이로 설정되어 있어 이것보다 긴 리스트의 뒷부분이 무시되는 케이스가 존재했다.
알게 된 점
python에서 만나게 되는 실수와 조금 친해지며 금방 파악할 수 있었다.
'개발일지 > TIL' 카테고리의 다른 글
TIL 23-07-12 백준 반례찾기 팰린드롬수 (0) | 2023.07.12 |
---|---|
TIL 23-07-07 백준 알고리즘 - 암기왕 (0) | 2023.07.07 |
TIL 23-07-04 OAuth (0) | 2023.07.04 |
TIL 23-06-29 python __name__사용 하기 (0) | 2023.06.29 |
TIL 23-06-28 javascript decodeURIComponent (0) | 2023.06.28 |