Algorithm Problem/Python

    [python] 프로그래머스 - 교점에 별 만들기(위클리 챌린지)

    [python] 프로그래머스 - 교점에 별 만들기(위클리 챌린지)

    🤔문제 해결 💨 교점 구하기 -> 문제에서 주어진 공식으로 모든 교점을 구한다. 💨 배열 크기 정하기 -> x, y 의 최대 최소값으로 💨 배열 만들기 -> 배열을 만든다. 💨 별 찍기 -> 왜 좌표가 (y_max - y, x - x_min) 인지 헷갈릴 수 있다. 수학 좌표랑 배열로 나타내는 좌표의 0점이 다르기 때문에 적절하게 바꿔줘야한다. 💻소스 코드 def solution(line): dot_list = [] for i in range(len(line)): A, B, E = line[i] for j in range(i + 1, len(line)): C, D, F = line[j] bunja = A * D - B * C if int(bunja) == 0: continue x = (B * F - E ..

    [python] 프로그래머스 - 빛의 경로 사이클(월간 코드 챌린지 시즌3)

    [python] 프로그래머스 - 빛의 경로 사이클(월간 코드 챌린지 시즌3)

    🤔문제 해결 💨 문제에서 시키는대로 그대로 풀었다. (구현) 💫 visited 라는 3차원 배열을 만든다. 제일 안쪽의 원소에는 'U','D','R','L' 이 들어갈 수 있는데 해당 위치(i, j) 에서 이동한 방향을 담고 있다. 싸이클이 다르면 절대로 이동경로가 하나라도 똑같은게 나올 수 없기 때문에. 이동할 때 UDRL 이 있는지 확인을 하고 이동한다. 💻소스 코드 def solution(grid): answer = [] N, M = len(grid), len(grid[0]) visited = [[set() for _ in range(M)] for _ in range(N)] # U, D, L, R for i in range(N): for j in range(M): for k in 'UDLR': cn..

    [python] 프로그래머스 - n^2 배열 자르기(월간 코드 챌린지 시즌3)

    [python] 프로그래머스 - n^2 배열 자르기(월간 코드 챌린지 시즌3)

    🤔문제 해결 💨 규칙을 찾아내는 수학문제? 같은 느낌, 문제의 설명대로 풀면 10^7 이므로 시간초과 발생.... 좌표를 활용하여 문제풀이 💫 빈 배열에 숫자를 넣는 공식은 행(i), 열(j) 의 최대값 + 1 💫 ex) 0행 2열의 값은 3, 1행 0열의 값은 2 💫 그림(4 x 4 행렬)에서 left(7) 부터 right(14) 는 [1,3] 부터 [3,2] 💫 좌표를 구하는 방법은 left = [7//4, 7%4] = [1, 3] 💫 결국 풀이는 좌표를 구해서 그 지점의 숫자를 결과 배열에 넣어주면 된다. 💻소스 코드 def solution(n, left, right): answer = [] for i in range(left, right + 1): answer.append(max(i // n, i..

    [python] 프로그래머스 - 피로도(위클리챌린지)

    [python] 프로그래머스 - 피로도(위클리챌린지)

    🤔문제 해결 💫 던전의 길이가 최대 8개 이므로 permutation으로 탐험하는 순서의 모든 경우의 수를 구했다. 💫 탐험 순서대로 던전을 탐험하며 피로도 조건에 맞는 동굴만 탐험하며 갯수를 세어준다. 💫 각각의 사이클마다 탐험가능한 동굴의 갯수를 최대값으로 업데이트 해준다. 💻소스 코드 from itertools import permutations def solution(k, dungeons): answer = -1 for perm in (permutations(dungeons, len(dungeons))): cur_k = k expol_cnt = 0 for dungeon in perm: if cur_k >= dungeon[0]: expol_cnt += 1 cur_k -= dungeon[1] answ..

    [python] 프로그래머스 - 신고 결과 받기(2022 KAKAO BLIND RECRUITMENT)

    [python] 프로그래머스 - 신고 결과 받기(2022 KAKAO BLIND RECRUITMENT)

    🤔문제 해결 💨 다른 풀이의 경우 딕셔너리를 따로 만들지 않고 풀어서 메모리에서는 이점이 있고 속도가 느린 단점이 있지만, 나의 경우에 딕셔너리 쓰는 것을 좋아하여 메모리를 더 사용하지만 속도는 10배 빨랐다(ex. 3번문제 1000ms vs 100ms) 💻소스 코드 def solution(id_list, report, k): answer = [] reported_dict = {id: {'reporter': set(), 'mail_cnt': 0} for id in id_list} for r in report: reporter, reported_person = r.split(' ') reported_dict[reported_person]['reporter'].add(reporter) for key, val..

    [python] 백준 - 20055. 컨베이어 벨트 위의 로봇

    [python] 백준 - 20055. 컨베이어 벨트 위의 로봇

    🤔문제 해결 회전은 deque 의 rotate 메소드 이용 내구도 리스트, 벨트 위의 로봇 리스트 주어진 지문대로 구현하면 된다. 시간초과 때문에 고생했던 문제 벨트의 맨 끝에 로봇이 오면 항상 내려줘야한다. 💻소스 코드 import sys from collections import deque input = sys.stdin.readline N, K = map(int, input().split()) belt = deque(map(int, input().split())) robots = deque([0]*N) cnt = 0 while True: cnt += 1 # 1. 벨트 회전 belt.rotate() robots.rotate() # 내리는 위치에 로봇이 있다면 내린다. robots[-1] = 0 # 2..