분류 전체보기 249

프로그래머스 키패드 누르기(파이썬)

좌표로 번호판을 생각한다는게 어려웠다. 무엇보다 꼼꼼히 구현을 해야하는 문제 def solution(numbers, hand): answer = '' dic = {1: [0,0], 2:[0,1], 3:[0,2], 4:[1,0], 5:[1,1], 6:[1,2],7:[2,0],8:[2,1],9:[2,2],\ '*':[3,0],0:[3,1],'#':[3,2]} #좌표별로 나누기 left_n = dic['*'] #왼손 시작 right_n = dic['#'] #오른손 시작 for i in numbers: now = dic[i] #가고자 하는 위치 if i ==1 or i==4 or i == 7: answer+='L' left_n =now #무조건 왼손 elif i ==3 or i == 6 or i == 9: an..

프로그래머스 신규아이디 추천(파이썬)

카카오 2021 블라인드 문제로 나왔었다. 그냥 시키는 대로 구현하면 되는 쉬운 문제지만 꼼꼼하게 하지 않으면 인덱스 오류같은 오류가 난다. 자세한건 주석으로 설명했다. def solution(new_id): answer = '' new_id=new_id.lower() #소문자로 # print(new_id) for i in range(len(new_id)): #특정문자 외 제거 if new_id[i].isalpha() or new_id[i].isdigit() or new_id[i] in ["-", "_", "."]: answer+=new_id[i] # print(answer) while ".." in answer: # .. 를 .로 answer = answer.replace("..",".") if ans..

프로그래머스 소수찾기(파이썬)

에라토스테네스의 체를 이용하는 문제. 모든 수를 소수라 하고 소수를 1로 a배열에 저장해두고 소수의 배수들은 모두 소수가 아니다라는 개념을 이용한 dp. 소수를 1로 둬서 소수의 개수를 찾기도 쉽다. def solution(n): answer = 0 a=[1]*(n+1) # 소수면 1 a[0]=0 a[1]=0 for i in range(2,n+1): if a[i]==0: continue for j in range(2,n//i+1): a[i*j]=0 answer = sum(a) #소수 개수의 총합 return answer

프로그래머스 체육복(파이썬)

이 문제의 경우 풀이는 매우 간단하나 딱 풀이를 떠올려서 구현하기가 너무 힘들다. 그리고 왼쪽에 있는 학생한테 먼저 빌려줘야 하는것도 키포인트 def solution(n, lost, reserve): a= set(lost)-set(reserve) b= set(reserve)-set(lost) #lost와 reserve 중복제거 for i in b: #체육복을 빌려줄 수 있을 때 if i-1 in a: #그 전 번호부터 확인해 봐야한다. 빌려줄 수 있을 때. a.remove(i-1) elif i+1 in a: #그 다음 번호한테 빌려줄 수 있을 때 a.remove(i+1) return n-len(a)

프로그래머스 숫자 문자열과 영단어(파이썬)

영단어 별로 딕셔너리로 값을 지정하고 주어진 문자열은 숫자, 3글자, 4글자, 5글자중 하나임으로 케이스를 나눠서 숫자로 바꿔준다. def solution(s): answer = 0 b=[] a = {"zero":0, "one": 1, "two": 2, "three": 3, "four": 4, "five":5, "six":6, "seven":7, \ "eight": 8, "nine": 9} #영단어 별로 숫자로 정리 while True: if s[:3] in a: #3글자일때 b.append(str(a[s[:3]])) #3글자에 해당하는 a값을 b에 추가 s=s[3:] #s는 3번째 이후부터 elif s[:4] in a: #4글자일때 b.append(str(a[s[:4]])) s=s[4:] elif s[..

프로그래머스 로또의 최고순위와 최저순위(파이썬)

순위를 배열에 정리하고 최대로 맞췄을 경우와 최소로 맞췄을 경우를 배열에 넣는다. def solution(lottos, win_nums): answer = [] Back = [6,6,5,4,3,2,1] #6등부터 1등까지 a=set(win_nums)-set(lottos) #동일한 번호를 빼줌 l = 6-len(a) #몇 개 번호가 일치하는지 x =l+lottos.count(0) #최대 당첨 if x>6: #6등일 때 x=6 m=Back[x] #최대 n=Back[l] #최소 answer.append(m) answer.append(n) return answer

프로그래머스 신고 결과 받기(파이썬 풀이)

프로그래머스에서 레벨1로 풀 수 있는 문제. 2022 kakao 블라인드 문제1번문제같은데 처음엔 막막했다. 다만 split()함수 잘 이용하면 크게 어렵진 않은 것 같다 def solution(id_list, report, k): report = set(list(report)) #report의 중복 없애줌 a= [] b=[] c=[] reported = [x.split()[1] for x in report] #리폿 당한 애들 for i,v in enumerate(id_list): if reported.count(v)>=k: #k번 이상 리폿 당했으면 a.append(v) #리폿 당한 사람이름 a에 저장 rar = [x.split() for x in report] #리폿한 사람과 당한 사람 for i i..

Leetcode 1528 풀이(파이썬, 스위프트)

indices의 값들에 해당하는 배열의 원소들을 indices의 인덱스에 해당되게끔 바꾸는 문제이다. 파이썬의 경우 구현이 쉬웠지만 스위프트는 아직 문자열과 배열의 교환이 어설퍼서 삽질을 했다. 파이썬 class Solution: def restoreString(self, s: str, indices: List[int]) -> str: s= [x for x in s] a=[0]*len(s) for i,v in enumerate(indices): a[v]=s[i] return "".join(a) 스위프트 class Solution { func restoreString(_ s: String, _ indices: [Int]) -> String { var a = [Character](repeating:"a", ..

리트코드 풀이 2022.02.08

Leetcode 2006 풀이(파이썬, 스위프트)

for문을 전체 길이-1 까지 돌리고 그 안에 2중 for문으로 i+1부터 전체길이까지 두 값의 차이가 k인 것들의 개수를 +해준다. 파이썬: class Solution: def countKDifference(self, nums: List[int], k: int) -> int: cnt = 0 for i in range(len(nums)-1): for j in range(i+1, len(nums)): if abs(nums[i]-nums[j])==k: # 차이의 절대값이 k일때 cnt+=1 # cnt 1증가 return cnt 스위프트: class Solution { func countKDifference(_ nums: [Int], _ k: Int) -> Int { var cnt = 0 for i in 0..

카테고리 없음 2022.02.07