반응형
안녕하세요~
27년차 진로탐색꾼 조녁입니다!
1일 1코테 24일차! 고득점 Kit 에서 탐욕법(그리디) 테마 문제 풀어보았습니다.
제가 이번주부터 알바를 시작해서 이제야 올리네요!
그래도 월요일이랑 화요일 한 문제씩 풀어봤는데 포스팅을 못했습니다.
이번주부터는 답을 절대안보기로해서 다 못풀어도 일단 올려두고 다시 풀려고 합니다!
· 문제명 : 조이스틱
· 사용 언어 : Python3
· 난이도 : Level2
· 문제 설명
programmers.co.kr/learn/courses/30/lessons/42860
오답코드
def solution(name):
#알파벳 : ABCDE / FGHIJ / KLMNO / PQRST / UVWXY / Z
# a -> N 이면 반대로, M 이면 그대로
answer = 0
for i in name:
#각 자리마다 최적의 이동수
answer += min((26-abs(ord("A")-ord(i))), abs(ord("A")-ord(i)))
#자리수 최적이동계산
#예외처리 : [1:] 에서 "A"가 몇개나 연속되는 지 확인하고 싶음!!
# 앞부분에 개수만큼 이득 / 뒷부분은 맨뒤에가 A아니면 이득 없음
if name[1:-1] == "A"*(len(name)-2):
answer +=1
elif name[-1] == "A":
answer +=len(name)-2
elif name[1] =="A":
answer +=len(name)-2
else:
answer +=len(name)-1
return answer
위 코드는 90.9점이 나왔다. 11번째 케이스가 실패가 떴다. 다시 풀어봐야겠다.
다시 풀떄는 자리수 최적이동계산을 위치 이동으로 계산해봐야겠다.
오답코드 2
def solution(name):
#알파벳 : ABCDE / FGHIJ / KLMNO / PQRST / UVWXY / Z
# a -> n이면 반대로, m이면 그대로
answer = 0
for i in name:
#각 자리마다 최적의 이동수
answer += min((26-abs(ord("A")-ord(i))), abs(ord("A")-ord(i)))
#자리수 최적이동계산
#두가지 경우 : 첫번째 -> 방향, 두번째 <- 방향
for i in name:
if i !="A":
name = name.replace(i,"1")
name = name.replace("A","0")
#예외가 뭐가 있을까 왼쪽으로 갔는데 min 이 시작점일 때가 오류다. -> 맨앞을 잘라서 해결함
name = list(name)[1:]
idx = []
for i in range(len(name)):
if name[i] =="1":
idx.append(i)
answer += min(max(idx)+1,1+abs(len(name)-1-min(idx)))
return answer
#오답 사유 : 한쪽으로만 이동할 수 있는 것이 아니다!!
위 코드도 케이스 11에서 막혔는데 , 오답 사유를 찾았다. 바로 한쪽으로만 이동하지 않는 다는 것이다.
예를들어 ABAAAAAACD 와 같은 경우는 -> , <- , <- ,<- 으로 이동하는 것이 최소 동선이다. 하지만 왼쪽으로 이동하거나 오른쪽으로만 이동하는 코드를 짠다면 이 예시는 맞출 수 없다.
내일은 다른 방법으로 풀어야지.
https://link.coupang.com/a/rGILU
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
반응형
'코딩테스트 준비 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 다리를 지나는 트럭 (0) | 2021.04.28 |
---|---|
[프로그래머스] 기능개발 (0) | 2021.04.03 |
[프로그래머스] 가장 큰 수 (0) | 2021.04.02 |
[프로그래머스] 실패율 (0) | 2021.03.30 |
[프로그래머스][1차]비밀지도 (0) | 2021.03.29 |