PS/Programmers
[프로그래머스] 불량사용자 파이썬 풀이
[프로그래머스] 불량사용자 파이썬 풀이
2021.12.10[문제 링크] https://programmers.co.kr/learn/courses/30/lessons/64064 [입출력 예] user_id banned_id result ["frodo", "fradi", "crodo", "abc123", "frodoc"] ["frd", "abc1**"] 2 ["frodo", "fradi", "crodo", "abc123", "frodoc"] ["rodo", "rodo", "**"] 2 ["frodo", "fradi", "crodo", "abc123", "frodoc"] ["frd", "rodo", "*****", "**"] 3 [최초 접근 방식] # 경우의 수 구하듯이 접근했음. # 이런 식으로 풀면 banned_id가 중복될 때 # 또는 교환이 가능할 때(예제3)..
[프로그래머스] 보석 쇼핑 파이썬 풀이
[프로그래머스] 보석 쇼핑 파이썬 풀이
2021.12.09[문제 링크] https://programmers.co.kr/learn/courses/30/lessons/67258 [입출력 예] gems result ["DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"] [3, 7] ["AA", "AB", "AC", "AA", "AC"] [1, 3] ["XYZ", "XYZ", "XYZ"] [1, 1] ["ZZZ", "YYY", "NNNN", "YYY", "BBB"] [1, 5] [1차시도 테스트케이스 4/4 제출 15.6] def solution(gems): answer=[] start,end=0,0 set_gem=set(gems) while end!=len(gems)-1: while len(set(g..
[프로그래머스] 셔틀버스
[프로그래머스] 셔틀버스
2021.12.08[문제 링크] https://programmers.co.kr/learn/courses/30/lessons/17678?language=python3 [입출력 예] n t m timetable answer 1 1 5 ["08:00", "08:01", "08:02", "08:03"] "09:00" 2 10 2 ["09:10", "09:09", "08:00"] "09:09" 2 1 2 ["09:00", "09:00", "09:00", "09:00"] "08:59" 1 1 5 ["00:01", "00:01", "00:01", "00:01", "00:01"] "00:00" 1 1 1 ["23:59"] "09:00" 10 60 45 ["23:59","23:59", "23:59", "23:59", "23:59", "2..
[프로그래머스] 자물쇠와 열쇠 파이썬
[프로그래머스] 자물쇠와 열쇠 파이썬
2021.11.28[문제 링크] https://programmers.co.kr/learn/courses/30/lessons/60059 [입출력 예] key lock result [[0, 0, 0], [1, 0, 0], [0, 1, 1]] [[1, 1, 1], [1, 1, 0], [1, 0, 1]] true [소스코드] def rotate(lock): rotated = [[ 0 for _ in range(len(lock))] for _ in range(len(lock))] for r in range(len(lock)): for c in range(len(lock)): rotated[len(lock)-1-c][r]=lock[r][c] return rotated def check(lock_length,key_length,loc..
[프로그래머스] 순위
[프로그래머스] 순위
2021.11.27[문제 링크] https://programmers.co.kr/learn/courses/30/lessons/49191 [입출력 예] n results return 5 [[4, 3], [4, 2], [3, 2], [1, 2], [2, 5]] 2 [소스코드] def solution(n, results): win,lose = 1, -1 #1 # 결과를 숫자로 추상화 graph = [[0 for _ in range(n)] for _ in range(n)] #2 for result in results: winner, loser = result graph[winner-1][loser-1]=1 graph[loser-1][winner-1]=-1 # A가 B에게 이겼으면 graph[A][B]=1로 기록 # 졌으면 -1로 ..
[프로그래머스] 네트워크 파이썬
[프로그래머스] 네트워크 파이썬
2021.11.27[문제 링크] https://programmers.co.kr/learn/courses/30/lessons/43162 [입출력 예] n computers return 3 [[1, 1, 0], [1, 1, 0], [0, 0, 1]] 2 3 [[1, 1, 0], [1, 1, 1], [0, 1, 1]] 1 [소스코드] def solution(n, computers): #nested function을 이용하면 매번 computers, visited를 넘겨주지 않아도 괜찮다!!! #scope가 윗방향으로만 탐색되어진다는 걸 항상 기억하자 def dfs(i): if visited[i]==False: visited[i]=True for j in range(len(computers)): if j != i and comp..
[프로그래머스] 정수삼각형 파이썬 풀이
[프로그래머스] 정수삼각형 파이썬 풀이
2021.11.27[문제 링크] https://programmers.co.kr/learn/courses/30/lessons/43105 [입출력 예] triangle result [[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]] 30 def solution(triangle): answer = [] #1 #answer의 i번째 원소에는 i번째 줄 까지 왔을 때 각 위치에서 누적값의 최대값 for line_index, line in enumerate(triangle): answer.append([]) for element_index,element in enumerate(line): if line_index ==0: answer[0].append(element) #2 # 처음 원..
[프로그래머스] 디스크 컨트롤러 파이썬
[프로그래머스] 디스크 컨트롤러 파이썬
2021.11.25[문제 링크] https://programmers.co.kr/learn/courses/30/lessons/42627 [입출력 예] jobs return [[0, 3], [1, 9], [2, 6]] 9 [소스코드] from collections import deque def solution(jobs): import heapq # while 문 두 번 사용 # 우선 요청 순서대로 정렬하고, # 하나 처리 후 현재까지 온 요청들을 # 빨리 끝낼 수 있는 것부터 처리 # 1. jobs 정렬 # deque은 sort, sorted와 안맞는다. jobs=deque(sorted(jobs)) # n은 처리한 요청 수 answer = 0 n = 0 # 2. 최초 시간 설정 # 시간을 따라가면서 작업을 진행한다. # 처리..
[프로그래머스] 가장 먼 노드 파이썬 풀이
[프로그래머스] 가장 먼 노드 파이썬 풀이
2021.11.25[문제 링크] https://programmers.co.kr/learn/courses/30/lessons/49189 [입출력 예] n vertex return 6 [[3, 6], [4, 3], [3, 2], [1, 3], [1, 2], [2, 4], [5, 2]] 3 [소스코드] from collections import deque def bfs(v,visited,graph): count=0 q=deque([[v,count]]) #4 # 노드번호,count while q: value=q.popleft() v=value[0] count=value[1] if visited[v]==-1:#5 # 미방문 지역일 경우 # 방문여부갱신, count증가 # 증가된 카운트를 다음 점과 연결 # count를 누적방식으로..
[프로그래머스] N으로 표현 파이썬 풀이
[프로그래머스] N으로 표현 파이썬 풀이
2021.11.25[문제 링크] https://programmers.co.kr/learn/courses/30/lessons/42895 [입출력 예] N number return 5 12 4 2 11 3 [소스코드] def solution(N, number): possible_set=[[]] #1. possible_set의 i번째 원소는 # 0번 인덱스는 쓰지 않기 때문에 빈 리스트를 채운다. # 2. i개의 숫자로 만들 수 있는 숫자 종류이다. # 3. 가장 먼저 그 수 i개를 그대로 붙여서 만들 수 있는 것을 추가한다. for i in range(1,9): temp=[] temp.append(int(str(N)*i)) for j in range(1,i//2+1): print(j,i//2+1) for a in possib..
[프로그래머스] 자물쇠와 열쇠 파이썬
[프로그래머스] 자물쇠와 열쇠 파이썬
2021.11.11문제 링크 풀이1 https://johnyejin.tistory.com/127 lock을 중앙에 고정시키고 key를 주위에서 맞춰본다. 마치 CNN의 컨볼루션 연산과 같다. check는 키가 맞는지를 체크한다. 우선 startX,startY는 확장된 그래프에서 0,0부터 lock의 오른쪽 하단까지를 돌고, i,j는 키 안을 순회한다. 그렇게 start+i,j 값을 통해 키를 맞춰본다. 맞춰보는 과정에서는 값을 더한다. 그리고 lock을 더해준다. 더함과 동시에 1인지 체크, 1이 아니면 False반환 4번 도는 for문에서 key를 한번 회전시키고 다시 for문을 처음부터 돌린다.
[프로그래머스] 다단계 칫솔 판매 파이썬
[프로그래머스] 다단계 칫솔 판매 파이썬
2021.11.11[문제 링크] https://programmers.co.kr/learn/courses/30/lessons/77486 [입출력 예] enroll referral seller amount result ["john", "mary", "edward", "sam", "emily", "jaimie", "tod", "young"] ["-", "-", "mary", "edward", "mary", "mary", "jaimie", "edward"] ["young", "john", "tod", "emily", "mary"] [12, 4, 2, 5, 10] [360, 958, 108, 0, 450, 18, 180, 1080] ["john", "mary", "edward", "sam", "emily", "jaimie", "t..
프로그래머스_정수삼각형
프로그래머스_정수삼각형
2021.10.20[문제 링크] https://programmers.co.kr/learn/courses/30/lessons/43105?language=python3 [소스코드] def solution(triangle): answer = [] for line_index, line in enumerate(triangle): answer.append([]) for element_index,element in enumerate(line): if line_index ==0: answer[0].append(element) if line_index >0 \ and (element_index == 0 or element_index == len(line)-1): answer[line_index].append(element+answer[l..
[프로그래머스] 입국심사 파이썬 풀이
[프로그래머스] 입국심사 파이썬 풀이
2021.10.18[문제 링크] https://programmers.co.kr/learn/courses/30/lessons/43238 [입출력 예] n times return 6 [7, 10] 28 입출력 예 설명 가장 첫 두 사람은 바로 심사를 받으러 갑니다. 7분이 되었을 때, 첫 번째 심사대가 비고 3번째 사람이 심사를 받습니다. 10분이 되었을 때, 두 번째 심사대가 비고 4번째 사람이 심사를 받습니다. 14분이 되었을 때, 첫 번째 심사대가 비고 5번째 사람이 심사를 받습니다. 20분이 되었을 때, 두 번째 심사대가 비지만 6번째 사람이 그곳에서 심사를 받지 않고 1분을 더 기다린 후에 첫 번째 심사대에서 심사를 받으면 28분에 모든 사람의 심사가 끝납니다. [소스코드] def solution(n, times):..
프로그래머스_추석트래픽
프로그래머스_추석트래픽
2021.10.14[문제 링크] https://programmers.co.kr/learn/courses/30/lessons/17676?language=python3 [입출력 예제] 각 문자열은 요청에 대한 응답 완료시간S와 처리시간 T이다. 처리 시간은 끝 시간을 포함하기 때문에, 응답 시작시간은 완료시간-처리시간 + 0.001초이다. 이런 상황에서 요청이 가장 많은 1초를 찾는 것이 목표이다. [소스코드] def solution(lines): # end == Response Completion Time 응답 완료 시각 # start == Response Beginning Time 응답 시작 시각 # processing == Processing Time 응답 처리시간 answer = 0 start_times=[] #1. ..
프로그래머스_표_편집
프로그래머스_표_편집
2021.09.09[문제 링크] https://programmers.co.kr/learn/courses/30/lessons/81303 [입출력 예] n k cmd result 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z"] "OOOOXOOO" 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z","U 1","C"] "OOXOXOOO" [소스코드1] 출처: https://ckd2806.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-python-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%ED%91%9C-%ED%8E%B8%EC%A7%91 def solution(..
프로그래머스_N개의최소공배수_파이썬
프로그래머스_N개의최소공배수_파이썬
2021.09.09[문제 링크] https://programmers.co.kr/learn/courses/30/lessons/12953?language=python3 [소스코드] def gcd(a,b): if (b>a): a,b=b,a if b==0: return a return gcd(b,a%b) def lcm(a,b): return a*b/gcd(a,b) def solution(arr): answer=1 for i in range(len(arr)): answer=lcm(arr[i],answer) return answer [풀이] 유클리드 호제법으로 gcd 정의 두개씩 최소공배수 구하면 됨.
프로그래머스_신규아이디추천_파이썬
프로그래머스_신규아이디추천_파이썬
2021.09.09[문제 링크] https://programmers.co.kr/learn/courses/30/lessons/72410 [소스코드] import re def solution(new_id): st = new_id st = st.lower() st = re.sub('[^a-z0-9\-_.]', '', st) st = re.sub('\.+', '.', st) st = re.sub('^[.]|[.]$', '', st) st = 'a' if len(st) == 0 else st[:15] st = re.sub('^[.]|[.]$', '', st) st = st if len(st) > 2 else st + "".join([st[-1] for i in range(3-len(st))]) return st 정규표현식 사용법 ..
프로그래머스_크레인_인형뽑기_게임
프로그래머스_크레인_인형뽑기_게임
2021.09.09[문제 링크] https://programmers.co.kr/learn/courses/30/lessons/64061 [소스코드] def solution(board, moves): stacklist = [] answer = 0 for i in moves: for j in range(len(board)): if board[j][i-1] != 0: stacklist.append(board[j][i-1]) board[j][i-1] = 0 if len(stacklist) > 1: if stacklist[-1] == stacklist[-2]: stacklist.pop(-1) stacklist.pop(-1) answer += 2 break return answer [풀이] 순회할 때, move는 열좌표이며 1부터 시..
프로그래머스_키패드누르기_파이썬
프로그래머스_키패드누르기_파이썬
2021.09.09[문제 링크] https://programmers.co.kr/learn/courses/30/lessons/67256 [소스코드] def solution(numbers, hand): answer = '' key_dict = {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 = [1,4,7] right = [3,6,9] lhand = '*' rhand = '#' for i in numbers: if i in left: answer += 'L' lhand = i elif i in right: answer += 'R' rhand = i else: curPos = ke..
프로그래머스_비밀지도_파이썬
프로그래머스_비밀지도_파이썬
2021.09.09[문제 링크] https://programmers.co.kr/learn/courses/30/lessons/17681 [소스코드] def solution(n, arr1, arr2): answer = [] for i,j in zip(arr1,arr2): a12 = str(bin(i|j)[2:]) a12=a12.rjust(n,'0') a12=a12.replace('1','#') a12=a12.replace('0',' ') answer.append(a12) return answer [풀이] zip()은 2개 이상의 시퀀스를 짧은 길이 기준으로 일대일 대응하는 튜플 시퀀스를 만들고 제너레이터로 리턴한다. 내장함수 bin()은 이진수로 바꿀 수 있다. bin()을 사용하면 0b가 앞에 붙기 때문에 슬라이싱해준다. ..