Home

[프로그래머스] 베스트앨범

1. 문제 https://programmers.co.kr/learn/courses/30/lessons/42579 2. 풀이 방법 hash를 이용하여 노래 장르를 key로 하고 value는 (노래의 인덱스, 재생 횟수)를 인자로 가지는 배열을 가집니다. 위의 요소들의 총 재생시간을 더하여 어떤 노래 장르가 먼저 나올지 결정합니다. 각 key의 배열을 정렬합니다. 정렬할 때 재생회수가 같은 경우에는 적은 인덱스를 가진 요소를 앞으로 가져옵니다. 이 때, 2개의 노래만 최종 노래로 지정할 것이기 때문에 2개만 남기고 제거합니다. 장르의 순서를 지정하였으면 장르 이름을 이용하여 hash에서 가지고 있...

Read more

[프로그래머스] 네트워크 문제풀이

1. 문제 https://programmers.co.kr/learn/courses/30/lessons/43162 2. 풀이 방법 bfs를 이용하여 문제를 해결합니다. 방문한 노드는 is_visited 배열을 사용하여 표시합니다. 모든 노드를 각각 순차적으로 확인합니다. 방문한 곳이 아니라면 queue에 넣습니다. queue에 있는 요소를 pop 하면서 연결된 노드가 있는지 확인합니다. 연결된 노드는 방문한 노드가 아니라면 queue에 새로 넣습니다. 모든 연결된 노드를 확인하면 queue에 남아 있는 요소가 없어집니다. 위의 한 과정이 진행되면 한 그룹을 확인한 것입니다. 정답에 1을 더해줍니다....

Read more

[프로그래머스] 타일 장식물 풀이

1. 문제 https://programmers.co.kr/learn/courses/30/lessons/43104 2. 풀이 방법 직사각형의 짧은 선분의 길이는 현재 가장 큰 도형의 길이이고, 직사각형의 긴 선분 길이는 현재 가장 큰 도형의 길이 다음의 도형의 크기입니다. 이를 for문을 이용하여 값을 구해줍니다. 3. 소스코드 3.1. python 정답 코드 def solution(N): arr = [0] * (N+1) arr[0] = 1; arr[1] = 1 for i in range(2, N+1): arr[i] = arr[i-1] + arr[i-2] ...

Read more

[프로그래머스] 2 x n 타일링 풀이

1. 문제 https://programmers.co.kr/learn/courses/30/lessons/12900?language=python3 2. 풀이 방법 arr[i] 의 값을 구하기 위해서는 아래의 2가지 경우의 수가 존재합니다. arr[i-1] 의 모든 경우의 수에서 세로 막대기 1개를 추가하는 경우 arr[i-2] 의 모든 경우의 수에서 가로 막대기 2개를 추가하는 경우(세로 막대 2개를 추가하는 경우는 이미 위의 케이스에 해당 됨) 즉, arr[i] = arr[i-1] + arr[i-2] 인 것을 알 수 있습니다. 3. 소스코드 3.1. python 시간 초과 코드 숫자가 매우 커...

Read more

[백준] 2399번 풀이 _ 거리의 합

1. 문제 https://www.acmicpc.net/problem/2399 2. 풀이 방법 2.1. $ O(N^2) $ 풀이 보자마자 떠오르는 생각. 직접 하나하나씩 비교해서 값을 구합니다. c언어의 경우에 통과할 수 있지만, python은 이렇게 해도 시간초과가 발생합니다. 2.2. $ O(N) $ 풀이 모든 구해야 하는 값을 위의 그림처럼 표로 나열해봅니다. 그러면 앞에 있는 [i] 의 개수는 $ i $개, 뒤에 있는 -[i] 개수는 $ n - i - 1 $ 개가 나오게 됩니다. 두 수의 합은 $ i * i + -i * (n - i - 1) = i * i + i * (-n + i + 1) = i...

Read more

Repeater, Redriver, Retimer란? 개념 정리

1. Repeater란? 1.1. Repeater의 정의 repeater의 역할 위키백과에서는 Repeater에 대하여 아래와 같이 언급하고 있습니다. 중계기(中繼器, 영어: repeater, 문화어: 반복기)는 신호를 받아 더 높은 수준에 더 높은 힘으로 방해가 되는 곳의 반대 쪽으로 재전송함으로써 신호가 더 먼 거리에 다다를 수 있게 도와 주는 전자 기기이다. 라디오 중계기(radio repeater), 전화 중계기(telephone repeater) 등이 있다. 전기 통신 분야에서 “중계기”라는 용어는 다음과 같은 의미를 표준으로 잡고 있다: 원본이 아날로그냐 디지털이냐에 ...

Read more

python 문자열(string)의 단어(character)를 list로 바꾸기

python에서 string의 단어(character)를 list로 만드는 방법은 아래와 같이 쉽게 할 수 있습니다. List Comprehension를 사용하는 방법 def str_split(word): return [char for char in word] print(str_split('test')) list()를 사용하는 방법 def str_split(word): return list(word) print(str_split('test'))

Read more

[백준] 10026번 풀이 _ 적록색약

1. 문제 https://www.acmicpc.net/problem/10026 2. 풀이 방법 모든 row와 col 을 살펴보면서 해당 블록의 주변에 있는 요소들이 같은 색일 경우에 방문한 것으로 체크하고, dfs를 통하여 상하좌우 요소들을 모두 살펴봅니다. 3. 주의 사항 import sys sys.setrecursionlimit(100000) python은 재귀함수 호출 횟수가 제한되어 있어(1000회) 그 횟수를 늘려주기 위한 메소드를 사용해야 문제에서 런타임 에러가 나지 않습니다. 4. 소스코드 import sys sys.setrecursionlimit(100000) N = int(inpu...

Read more

[백준] 1075번 풀이 _ 나누기

1. 문제 https://www.acmicpc.net/problem/5585 2. 풀이 방법 residue 에서 N 의 뒤 두 자리 숫자가 0이 되게 합니다. 이 숫자를 A라고 하겠습니다. A를 나누는 수 F로 나눠줍니다. F가 0이면 : 나눠 떨어진다는 의미이기 때문에 00을 출력합니다. F가 0이 아니면 : F와 나머지의 차이만큼 N에 값을 더해주면 정답입니다. 3. 소스코드 N = int(input()) F = int(input()) residue = ( N - (N%100) ) % F if residue == 0 : print("0...

Read more

[백준] 5585번 풀이 _ 거스름돈

1. 문제 https://www.acmicpc.net/problem/5585 2. 풀이 방법 가장 비싼 값을 가진 코인부터 가진 돈에서 빼주면서 개수를 구하면 항상 최소 동전의 개수가 나옵니다. 3. 소스코드 coin = [500, 100, 50, 10, 5, 1] _input = 1000 - int(input()) coin_num = 0 for _coin in coin: now_coin = (int) (_input / _coin) if now_coin > 0 : _input = _input - (now_coin * _coin) coin_num += now_...

Read more