프로그래머스 50

프로그래머스 - 네트워크

문제https://school.programmers.co.kr/learn/courses/30/lessons/43162 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr  풀이연결된 그래프가 총 몇 개인지 구하는 문제다따라서 모든 노드를 탐색해야 하며, 탐색을 총 몇 번 진행했는지 구하면 된다 그래프 탐색을 위해 dfs 알고리즘을 이용한다 인접 행렬에서 dfs를 진행하고 노드의 연결 여부에 상관없이 모두 탐색하므로 시간 복잡도는 O(N²)이다N의 최대값이 200이므로 시간 복잡도는 크게 상관없다 코드python123456789101112131415161718192..

프로그래머스 2024.06.03

프로그래머스 - 게임 맵 최단거리

문제https://school.programmers.co.kr/learn/courses/30/lessons/1844# 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr  풀이가중치가 없는 그래프이므로 최단거리를 찾기 위해 BFS 알고리즘을 사용한다그래프의 최대 크기가 100x100이므로 인접행렬을 통해 그래프를 만든다  코드python123456789101112131415161718192021222324252627def bfs(row, col, maps):    q = [[row, col]]        dist = [[-1] * len(maps[0]) for ..

프로그래머스 2024.04.15

프로그래머스 - 폰켓몬

문제https://school.programmers.co.kr/learn/courses/30/lessons/1845?language=python3 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr  풀이nums 배열의 폰켓몬의 종류가 모두 다른 경우는 문제의 최대값으로 N / 2 만큼 뽑을 수 있다.따라서 중복이 있을 경우는 N / 2이나 이보다 작은 값이 정답이 된다.종류를 고를 때는 중복을 제거한 nums에서 고른다. 중복을 제거한 nums의 길이가 N / 2 보다 같거나 크다면 N / 2만큼 중복되지 않은 폰켓몬을 뽑을 수 있으므로 N / 2가 정답이다. ..

프로그래머스 - 양과 늑대

문제https://school.programmers.co.kr/learn/courses/30/lessons/92343 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr  풀이루트 노드부터 인접 노드를 통해 갈 수 있는 모든 노드를 탐색한다.여기선 BFS를 사용한다. 인접 노드를 이동하려면 양과 늑대의 수를 비교해야 한다.아래 그림에서 0 -> 1로 바로 갈 순 없다.0->2 방향으로 탐색을 진행한 후 양의 수가 더 많으면 1을 탐색할 수 있는데, 그 전까지 1번은 방문해도 3번과 4번 노드에 대해 BFS 작업을 진행할 수 없다.트리의 노드를 구성할 때 아래와 같..

프로그래머스 - 미로 탈출

문제https://school.programmers.co.kr/learn/courses/30/lessons/159993 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr  풀이그래프에서 최소 시간을 찾아야 하므로 BFS를 사용한다.문제 조건 중 L 칸을 꼭 지나가야 하므로 BFS를 2번 진행한다.S - > L, L -> E 이 2번 중에 갈 수 없는 경로가 존재하면 -1을 리턴한다.L 칸에서 BFS를 새로 시작해야 하므로 큐, visit 배열등을 다시 초기화한다.다음 방문 노드를 큐에 집어넣을 때 BFS 진행 횟수(step)를 함께 저장하면 같은 level의 노..

프로그래머스 - 다단계 칫솔 판매

문제https://school.programmers.co.kr/learn/courses/30/lessons/77486 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr  풀이딕셔너리로 판매자의 추천자를 저장한다. 이를 통해 추천자를 타고 올라가서 root까지 찾을 수 있다.계산 결과를 저장할 때도 딕셔너리를 사용하면 편하게 저장할 수 있다.딕셔너리에 저장한 계산 결과들은 valuse() 함수를 이용해 구하면 된다.  코드python123456789101112131415def solution(enroll, referral, seller, amount):    an..

프로그래머스 - [3차] 압축

문제https://school.programmers.co.kr/learn/courses/30/lessons/17684 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr  풀이길이가 가장 긴 문자열을 찾기 위해 인덱스 두 개를 사용한다.문자열의 시작 인덱스 start_idx와 문자열의 끝 인덱스 end_idx를 이용하고, end_idx의 값을 증가하면서 가장 긴 문자열을 찾는다.msg[start_idx : end_idx]에 해당하는 문자열이 사전에서 못 찾을때까지 end_idx를 증가시키면 가장 긴 문자열을 찾을 수 있다.그러면 사전에서 못 찾은 문자열이 나왔을 ..

프로그래머스 - 의상

문제https://school.programmers.co.kr/learn/courses/30/lessons/42578 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr  풀이옷의 갯수를 종류별로 합산한다.옷의 각 종류별로 옷을 입을 수 있는 경우의 수를 구한다.경우의 수는 다음과 같다.종류별로 안에 있는 1개만 정해서 입는다. 이는 옷의 종류 갯수와 같다.또는 카테고리 안에 있는 옷을 아예 입지 않는다.따라서 특정 종류 안에 있는 옷의 수가 n 이라면 경우의 수는 n + 1이다. 여러 종류에서 나오는 경우의 수를 곱하면 모든 종류에 대해서 경우의 수가 나온다.마..

프로그래머스 - 메뉴 리뉴얼

문제https://school.programmers.co.kr/learn/courses/30/lessons/72411 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr  풀이orders에 있는 order마다 2개, 3개, 4개...씩 course 리스트에 있는 갯수만큼 조합을 만들고 course 갯수에 맞는 특정 조합의 갯수가 많은걸 찾아야 한다. orders의 order 마다 course 갯수만큼 조합을 찾기 위해 combinations 함수를 사용한다. 특정 조합이 만들어지는 횟수를 구하기 위해 Counter 객체를 이용한다.Counter를 통해 다음과 같이..

프로그래머스 - 신고 결과 받기

문제https://school.programmers.co.kr/learn/courses/30/lessons/92334 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr  풀이신고를 받은 횟수와 신고를 한 id를 함께 저장하기 위해 다음 형태로 딕셔너리를 만든다.{"신고 당한 id": ["신고한 id1", "신고한 id2"]}신고 당한 id 키에 해당하는 값 리스트의 길이가 k 보다 크면 이용 정지가 된다.그러면 리스트에 있는 신고한 id 마다 메일 받는 횟수를 1 증가시킨다.  코드python1234567891011121314151617181920def solu..

프로그래머스 2024.02.10