본문 바로가기

코딩테스트/Python

(225)
[프로그래머스] 위클리 챌린지 4주차 직업군 추천하기 내 코드 def solution(table, languages, preference): score = [] for tbl in table: s=0 a = tbl.split() for lng,p in zip(languages,preference): if lng in a: s += (len(a) - a.index(lng))*p score.append([a[0],s]) return sorted(score,key=lambda x:(-x[1],x[0]))[0][0] 위클리 챌린지 ~~~!! table에 있는 문자열을 나눠 a에 담는다. zip으로 언어와 선호도를 가져오면서 언어가 a에 있으면 순위를 계산하고 선호도를 곱해 합을 구한다. 이것을 table 길이만큼 반복한다. 계산한 점수들은 직업군들과 score에 ..
[프로그래머스] 소수 찾기 내 코드 def solution(n): a = set([i for i in range(2,n+1)]) for i in range(2,n): a-=set([k*i for k in range(2,n//i+1)]) return len(a) 에라토스테네스의 체~ 이걸로 안푸니까 시간초과나더라ㅠ 다른사람 코드 def solution(n): num=set(range(2,n+1)) for i in range(2,n+1): if i in num: num-=set(range(2*i,n+1,i)) return len(num) 이사람도 에라토스테네스의 체로 풀었는데 나보다 더 효율적이게 풀었다! 일단 처음에 set을 만들때 range이렇게만 해도 만들어진다. for문에서 범위를 n+1까지 돌려야한다. 나는 n까지 돌렸는데 ..
[프로그래머스] 3진법 뒤집기 내 코드 def solution(n): a = '' while n>=3: a += str(n%3) n = n//3 a+=str(n) a = int(a) return sum([int(j)*(3**(len(str(a))-i-1)) for i,j in enumerate(str(a))]) a에 3진법 뒤집은 수를 저장하고 10진법으로 바꿔서 출력하였다. 다른사람 코드 def solution(n): tmp = '' while n: tmp += str(n % 3) n = n // 3 answer = int(tmp, 3) return answer n을 while문을 돌릴때 0보다 크게하면 나처럼 마지막에 한번더 더해줄필요가 없다. 10진법으로 바꿀때는 int(tmp,3)이렇게 적으면 바로 10진법이 출력된다. 이때 ..
[프로그래머스] 내적 내 코드 def solution(a, b): return sum([i*j for i,j in zip(a,b)]) 다른사람 코드도 똑같다! 쉬움 ㅎㅎ
[프로그래머스] 음양 더하기 내 코드 def solution(absolutes, signs): sol=0 for a,s in zip(absolutes, signs): if s==False: sol-=a else: sol+=a return sol zip으로 하나씩 빼서 더해주었다. 다른사람 코드 def solution(absolutes, signs): return sum(absolutes if sign else -absolutes for absolutes, sign in zip(absolutes, signs)) 내코드를 한줄로 줄인거다.
[프로그래머스] 큰 수 만들기 내 코드 def solution(number, k): cur=0 delete=0 while True: if delete == k: break if number[cur] < number[cur+1]: if cur!=0: number = number[:cur] + number[cur+1:] cur-=1 else: number = number[cur+1:] delete+=1 else: cur+=1 if cur == len(number)-1: break if k!=delete: number = number[:delete-k] return number k개의 수를 제거하여 가장 큰 수를 구하는 문제이다. 처음에 문자열을 list로 변환해서 풀었는데 시간초과가 나왔다ㅠㅠ list를 사용할때는 list로 변환하고 p..
[프로그래머스] 조이스틱 내 코드 def solution(name): answer = 0 cursor = 0 l = [chr(ord('A')+i) for i in range(26)] s = ['A' for i in range(len(name))] while True: i = 0 idx = l.index(name[cursor]) answer += min(idx,26-idx) s[cursor] = name[cursor] if s == list(name): break while True: if s[(cursor+i)%len(s)] != name[(cursor+i)%len(s)]: cursor+=i answer+=i break elif s[(cursor-i)%len(s)] != name[(cursor-i)%len(s)]: cursor-..
[프로그래머스] 체육복 내 코드 def solution(n, lost, reserve): a = set(lost) & set(reserve) lost = set(lost) - a reserve = set(reserve) - a for i in range(1,n+1): if i in lost: if i-1 in reserve: lost-={i} reserve-={i-1} elif i+1 in reserve: lost-={i} reserve-={i+1} return n - len(lost) 먼저 lost와 reserve에서 중복되는 숫자를 빼준다. for 문을 n+1까지 돌려서 체육복을 잃어버린 학생 집합(lost)에 i가 존재하면 i 앞, 뒤 숫자(+1,-1)가 여분 체육복이 남는 학생 집합(reserve)에 있는지 본다. 존재..