목록Python (138)
나의 개발일지
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/67256 🔑 맨하탄 거리 번호들의 좌표, 양 엄지 손가락의 좌표를 기록 2, 5, 8, 0을 눌러야 할 때 맨하탄 거리 공식 | x1 - x2 |+ | y1 – y2 | 을 사용해 거리를 구한다. 거리가 짧은 손가락으로 누른다. def solution(numbers, hand): answer = '' # 번호들의 좌표 coordinate = {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), 0 : (3,1)} lh, rh = (3,0), (3,2) # 엄지 손가락 ..
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/17683 🔑 #붙은 음들을 다른 문자로 변환해서 비교를 했다. ex) "C#" = "c" 재생 시간보다 긴 악보일 때는 재생 시간만큼만 악보를 잘랐다. 재생 시간보다 짧은 악보일 때는 재생 시간 이상이 될 때까지 악보를 연결했다. 일치하는 악보가 여러 개 일 경우 재생 시간이 가장 긴 음악을 반환해야 하기 때문에 재생 시간을 음수로 넣고 정렬을 했다. 10분이면 -10 20분이면 -20 정렬하면 오름차순이 되기 때문에 -20, -10으로 정렬이 된다. 재생 시간도 같은 경우 먼저 입력된 음악을 반환, 이 과정도 위처럼 정렬을 하면 자동으로 성립된다. def convert(s): # C# ->..
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/72411 🔑 combinations(), Counter(), Counter.most_common() 코스 요리를 구성하려는 메뉴 개수로 손님들의 주문 중에서 조합을 구성하고 저장한다. collections모듈의 Counter를 사용하면 리스트, 딕셔너리, 문자열 등에서 데이터 개수를 쉽게 셀 수 있다. Counter클래스의 most_common() 함수는 인자로 숫자 하나를 받는다. 1 = 가장 개수가 많은 1개의 (key, value)를 반환 2 = 가장 개수가 많은 2개의 (key, value)를 반환.. 여기선 최댓값만 구한 후 이와 같은 개수를 가지고 2개 이상인 조합을 정답 리스트에..
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/72410 정규식을 잘 사용하면 쉬운 방법으로 풀 수 있겠다. import re def solution(new_id): special = ["~","!","@","#","$","%","^","&","*","(",")","
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/64061 🔑 stack def solution(board, moves): answer = 0 stack = [] p = -1 # 스택 높이 for m in moves: for i in range(len(board)): if board[i][m-1] != 0: # 인형을 찾으면 stack.append(board[i][m-1]) # 스택에 넣고 board[i][m-1] = 0 # 인형을 없앤다. p += 1 # 스택 높이 증가 break if p >= 1: # 인형 2개 이상 쌓였고 if stack[p] == stack[p-1]: # 자신과 바로 밑 인형이 같으면 stack.pop() # 둘 다..
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/17679 🔑 좌표 얻고, 터뜨리고, 내리기를 터뜨릴 게 없을 때까지 반복하면 되는 문제 4개가 모였다고 바로 터뜨리면 안 되고 모여있는 애들을 한 번에 터뜨려야 한다. 내리기는 제일 마지막 행부터 올라오면서 빈 공간이면 같은 열 위쪽에 처음 만나는 애와 자리 바꾼다. 터뜨릴 수 있는 좌표가 없으면 끝 answer은 마지막에 board를 다시 돌면서 빈 공간의 개수를 세도 되지만 바로바로 더해줬다. def solution(m, n, board): answer = 0 for i in range(m): # 2차원 리스트로 변환 board[i] = list(board[i]) def getCoord(..
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/17686 🔑 정규식 사용 re.search() 함수로 NUMBER 부분을 찾음 start() 함수로 NUMBER의 시작 인덱스를 얻음 end() 함수로 NUMBER의 끝 인덱스를 얻음 얻은 인덱스로 문자열 슬라이싱 해서 HEAD, NUMBER, TAIL을 구분 sort() 함수에 람다 표현식으로 HEAD로 우선 정렬, HEAD가 같다면 같은 애들 중 NUMBER로 정렬 lower()로 대소문자 구분 없앰, int로 문자열을 숫자를 정수형 숫자로 비교 HEAD, NUMBER, TAIL로 구분한 리스트를 하나의 문자열로 합쳐서 정답 리스트에 반환 import re def solution(file..
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/42888 {유저 아이디 : 닉네임} 의 쌍을 가지는 딕셔너리를 만들어 닉네임만 업데이트 시켜준다. def solution(record): answer = [] d = dict() # 아이디 : 이름을 저장하는 딕셔너리 for s in record: x = s.split() if x[0] != "Leave": # 들어오거나, 이름 변경할 때만 d[x[1]] = x[2] # 아이디 : 이름 저장 for s in record: # 아이디에 맞는 이름 찾아서 출력 x = s.split() if x[0] == "Enter": answer.append(d[x[1]] + "님이 들어왔습니다.") elif..