어느새 주말이네요.
그리고 Lv.1 문제도 절반을 넘겼습니다.
다음주가 끝날 때엔 Lv.2를 풀고 있도록 노력해보겠습니다.
틀린 코드
"인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다." < 이 조건이 어렵다.
def solution(strings, n):
answer = []
sort_dic = {}
for idx,item in enumerate(strings):
if item[n] in sort_dic.keys():
sort_dic[item[n+1]] = idx
sort_dic[item[n]] = idx
sort_dic = dict(sorted(sort_dic.items()))
for idx in sort_dic.values():
answer.append(strings[idx])
return answer
그냥...sort부터 때리고 n기준으로 바꾸면 어떨까?
그럼 동일 문자는 사전순으로 그대로 유지될테고 n번째가 다른 item만 순서가 바뀔듯?
틀린 코드 2
테스트 케이스는 통과하는데 채점하니 처참하다...ㅠㅠ
내가 정렬 알고리즘을 잘 모르나보다.
일단 전체 정렬부터 하는게 올바른 접근 방법임을 알았다!
def solution(strings, n):
strings.sort()
for idx in range(len(strings)-1):
if strings[idx][n] > strings[idx+1][n]:
strings[idx],strings[idx+1] = strings[idx+1],strings[idx]
return strings
수정 코드
sorted에 key가 혹시라도 될까 싶었는데 되더라...
윽....ㅠㅠ
def solution(strings, n):
strings.sort()
return sorted(strings, key=lambda x:x[n])
틀린 코드
index error가 뜬다...대체 왜....?
범위를 초과할 수가 없는데 왜 테케도 통과 못하는거지?
def solution(array, commands):
answer = []
for item in commands:
array = sorted(array[item[0]-1:item[1]])
answer.append(array[item[2]-1])
return answer
수정 코드
이럴수가..ㅎㅎㅎ...어이없다....
def solution(array, commands):
answer = []
for item in commands:
tmp = sorted(array[item[0]-1:item[1]])
answer.append(tmp[item[2]-1])
return answer
숏코딩
def solution(array, commands):
return [sorted(array[c[0]-1:c[1]])[c[2]-1] for c in commands]
쪼갤까?하다가 제한시간 10초를 보고 쪼개면 안될 것 같았다..
또 문자문자 붙어있는건 쪼갤 수 있는 방법이...ㅠㅠ
못 쪼개면 대체로 넘어가자.
틀린 코드
대체도 안되네???ㅠㅠ뭐지....
뜨는 에러는 무려..문자열을 숫자로 바꿀 수 없습니다...
대체가 아예 안 됐다는 뜻이다...
def solution(s):
answer = 0
num_str = {"zero":"0","one":"1","two":"2","three":"3",
"four":"4","five":"5","six":"6","seven":"7",
"eight":"8","nine":"9"}
for k,v in num_str.items():
answer = s.replace(k,v)
return int(answer)
이건 왜 되는데? 프로그래머스 자식들아
def solution(s):
num_str = {"zero":"0","one":"1","two":"2","three":"3",
"four":"4","five":"5","six":"6","seven":"7",
"eight":"8","nine":"9"}
for k,v in num_str.items():
s = s.replace(k,v)
return int(s)
틀린 코드
제일 먼저 생각난건 이런 방법.
근데 테케 2개 통과 못함 ㅠㅠ
import itertools
def solution(numbers):
answer = sorted([sum(c) for c in itertools.combinations(numbers, 2)])
answer = list(set(answer))
return answer
수정 코드
set으로 변환하면 정렬이 보장되지 않는다고 한다...
몰랐던 사실. 정렬 한 번 더하니 정답!
import itertools
def solution(numbers):
answer = sorted([sum(c) for c in itertools.combinations(numbers, 2)])
answer = sorted(list(set(answer)))
return answer
datetime 라이브러리 사용
근데..ㅎ 쓰면 안되겠지?
import datetime
def solution(a, b):
day = datetime.datetime(2016, a, b).strftime("%A")
day = day.upper()
return day[0:3]
안 쓴 코드
와 이거 두고두고 기억해야겠다.
왜 fri부터인지 사실 아직 이해가 되지 않는다.
def getDayName(a,b):
months = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
days = ['FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED', 'THU']
return days[(sum(months[:a-1])+b-1)%7]
def solution(nums):
ans = 0
max_len = len(nums)//2
nums = list(set(nums)) #중복제거
for i in nums:
if ans < max_len:
ans += 1
return ans
숏코딩
와...............
def solution(ls):
return min(len(ls)/2, len(set(ls)))
부분 문자열 어떻게 만들지..생각했는데,
자세히 보니까 크기비교만 하면 되는 문제라서
굳이 append해서 복잡하게 셀 필요가 없었다.
range()범위 조절이 관건, 슬라이싱 할 때 꼭 기억하자.
이렇게 하면 부분 문자열도 만들어서 출력할 수 있겠네....
def solution(t, p):
answer = 0
for i in range(len(t) - len(p) + 1):
if int(p) >= int(t[i:i+len(p)]):
answer += 1
return answer
틀린 코드
채점 개같이 실패...
찬찬히 뜯어보니 이 코드는 b=1일때만 성립한다;
def solution(a, b, n):
answer = 0
while n >= a:
lst = [c*a for c in range(1,n) if c*a <= n] #교환이 가능한 최대 수
n = n - max(lst) + int(max(lst)/a)
answer += int(max(lst)/a)
return answer
테스트 케이스 12번에서 시간초과가 뜬다ㅠㅠ
아무래도 12번이 엄청 큰 수고 리스트를 만드는데 꽤 걸리나 싶다.
그럼 저 부분을 for랑 if, 리스트를 쓰지않고 max(lst)를 대체해야 한다.
def solution(a, b, n):
answer = 0
while n >= a:
lst = [c*a for c in range(1,n) if c*a <= n] #교환이 가능한 최대 수
n = n - max(lst) + int(max(lst)//a)*b
answer += int(max(lst)//a)*b
return answer
answer만큼은 다시 받은거니까 무조건 더해지고
교환하고 남은 병의 개수도 더해야한다. (나머지)
def solution(a, b, n):
answer = 0
while n >= a:
answer += (n//a)*b
n = (n//a)*b + (n%a)
return answer
내 코드
def solution(food):
front = ""
for idx in range(1,len(food)):
if food[idx] < 2:
continue
else:
front += str(idx)*(int(food[idx])//2)
return front+"0"+front[::-1]
for문 안이 더 단순하네...
그렇네....1//2 해봤자 몫이 0이라서 굳이 if문 처리가 필요 없었다ㅠㅠ
def solution(food):
answer = ''
for i in range(1,len(food)):
answer+=str(i)*(food[i]//2)
return answer+"0"+answer[::-1]