
https://school.programmers.co.kr/learn/courses/30/lessons/17679 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 1. 풀이완전탐색이다board 전체를 완전탐색해서 사라질 블록들을 찾아 제거하고, 다시 또 완전탐색해서 사라질 블록들을 찾아 제거하는 것을 반복한다. board는 한 번 탐색하고 블록을 제거하고나면 상태가 달라지기 때문에 다시 완전탐색을 해서 새로 사라질 블록을 찾아 제거해야 한다.while True: # board 탐색을 반복할 while문 # board를 탐색하기 위한 이중 for문 for i in range(m - 1): for ..

https://www.acmicpc.net/problem/159611. 풀이입력이 매우 크므로 일반 input() 대신 빠른 sys.stdin.readline()을 사용하자.N의 크기가 무려 3,000,000이다. 알고리즘이 정답이더라도, 입력 받는 데서 시간이 지체되면 결국 실행 시간이 오래 걸리게 된다. 실제로 오랜만에 백준을 풀어서 습관처럼 input()을 사용했다가 시간 초과가 났었다. 어떤 초밥을 몇 개 먹었는지 저장하는 리스트(dishes)를 사용하자.리스트의 인덱스가 초밥의 종류를 나타내고, 해당 인덱스의 값이 고객이 그 초밥을 의미한다.고객이 먹을 수 있는 초밥 가짓수의 최대값은, 고객이 연속해서 먹은 k개의 접시에 쿠폰 번호 c가 포함되어 있지 않은 경우이다. 이를 다르게 생각하면 고객..

https://www.acmicpc.net/problem/14891 1. 풀이(n - 1)번째 결과를 바탕으로 가장 최소 비용을 만드는 n번째 선택을 하자.이전 결과를 담을 2차원 리스트가 필요하다. 행은 몇 번째 집인지를 의미하고, 열은 R(0), G(1), B(2) 중 어떤 색을 선택했는지에 대한 정보를 나타낸다. 위 그림은 백준의 첫 번째 입력 예제를 바탕으로 만들어진 2차원 리스트이다.예를 들어 1번 집을 초록색과 파란색 중 더 비용이 작은 색을 칠하고, 2번 집에 빨강(R)을 칠한다면 그 비용은 dp[1][0]에 담긴다. 이를 식으로 나타내면 dp[1][0] = min(dp[0][1], dp[0][2]) + COSTS[1][0]이다.그런데 사실 2번 집에 빨간색이 아니라, 초록색 혹은 파란..

https://school.programmers.co.kr/learn/courses/30/lessons/388351 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 1. 풀이모듈러 연산(%)으로 미리 주말 인덱스를 계산해두자.월요일이 1부터 시작하므로 토요일과 일요일은 6, 7이다. 따라서 각 케이스에서의 토요일과 일요일을 나타내는 인덱스는 (6 - startday), (7 - startday)이다. 그럼 이렇게가 끝인가? 아니다!만약 startday가 일요일이라면? 일요일 인덱스는 0이지만, 토요일 인덱스는 -1이 돼 버린다. 따라서 토요일, 일요일 인덱스를 구할 때는 (6 - startday) % 7..

https://www.acmicpc.net/problem/14891 1. 풀이회전하는 톱니바퀴의 왼쪽과 오른쪽을 나눠 각 톱니바퀴의 회전 여부를 파악하자 만약 2번째 바퀴를 회전시킨다면, 그것의 왼쪽에 있는 바퀴들과 오른쪽에 있는 바퀴들을 따로따로 고민해야 한다. 왼쪽을 먼저 보자. 2번째 바퀴의 왼쪽 부분, 즉 인덱스 6과 1번째 바퀴의 오른쪽 부분, 인덱스 2를 비교해야 한다. 두 자성이 다르기 때문에 1전째 바퀴는 2번째의 반대 방향으로 회전한다. 그리고 이제 1번째 바퀴의 인덱스 6과 0번째 바퀴의 인덱스 2를 비교해야 하는데, 0번째 바퀴가 없으므로 비교를 종료한다. 그럼 이제 오른쪽 방향을 살펴보자. 2번째 바퀴의 인덱스 2와 3번째 바퀴의 인덱스 6을 비교면하면 두 자성이 같음을 알 수 있다..

https://school.programmers.co.kr/learn/courses/30/lessons/131704 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr1. 풀이메인 컨베이어 벨트에서 꺼내는 택배 상자 번호를 n으로 두자.택배 상자는 번호 증가 순으로 메인 컨베이어 벨트에서 내릴 수 있다. 따라서 n = 1로 초기화하고, 보조 컨베이어 벨트나 트럭에 실을 때마다 1씩 증감해주자. 보조 컨베이어 벨트는 스택 자료 구조이다.보조 컨베이어 벨트에 마지막으로 보관한 상자부터 꺼낼 수 있다. Last In, Last Out. 스택 자료 구조이다. (1단계..

https://school.programmers.co.kr/learn/courses/30/lessons/12949 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr1. 풀이n x m 행렬A과 m * b 행렬B를 곱한 행렬은 n * b (m이 동일해야 곱셈 가능) 3중 for문을 사용하자.행렬A의 첫 번째 행인 [1, 1, 1]이 행렬B의 각 컬럼( [1, 4, 7], [2, 5, 8], [3, 6, 8])과 연산된다. 따라서 일단 행렬A의 행에 접근하는 for문이 필요하다.그리곤 이제 하나의 행에 대해 3개의 열이 연산되어야 하므로, 컬럼을 인덱싱하는 반복문이..

https://school.programmers.co.kr/learn/courses/30/lessons/49189 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 풀이 1번 노드에서부터 각 노드까지의 최단 거리를 구해야 하므로, BFS를 활용하자 그래프를 탐색하는 방법은 깊이 우선 탐색(DFS)와 너비 우선 탐색(BFS)가 있다. 이중 최단 거리를 구하는 데는 BFS를 사용한다. 사실 각 노드를 연결하는 간선의 비용을 모두 1로 둔 채 최소 비용을 구하는 다익스트라 알고리즘을 사용할 수도 있지만, 굳이 2차원 배열인 다익스트라를 사용하지 않아도 된다...

https://school.programmers.co.kr/learn/courses/30/lessons/42861 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 풀이 costs 리스트를 건설 비용 기준 오름차순 정렬하자 가장 적은 건설 비용으로 모두를 통행할 수 있게 해야 한다. 따라서 다리를 연결할 때 일단 건설 비용이 가장 적은 것부터 고려할 수 있도록 건설 비용을 기준으로 오름차순 정렬해주자. 섬이 어디 섬과 연결되어 있는지 표현하자 (부모 섬) bridges와 room이라는 리스트를 사용했다. bridges는 연결된 부모 섬을 나타내고, ro..

https://school.programmers.co.kr/learn/courses/30/lessons/42885 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 풀이 구명보트는 최대 2명밖에 사용할 수 없으므로 투포인터를 활용하자 몸무게를 오름차순으로 정렬한 후 left는 가장 첫 번째 몸무게를, right는 가장 마지막 몸무게를 가리킨다. 이 두 몸무게를 합쳤을 때 limit보다 작거나 같다면 둘 다 구명 보트에 탑승하고, 아니면 right - 1해서 다시 비교하기를 반복하자. 이때 구명보트에 탑승했다면 answer + 1해주자. (answer 초..