알고리즘/programmers 279

[Programmers 코딩테스트 고득점 Kit] N으로 표현

문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/42895 코딩테스트 연습 - N으로 표현 programmers.co.kr set을 이용해서 푸는 재밌는 문제였습니다. set을 이용한 이유는 숫자 중복을 방지하기 위해서입니다. 알고리즘은 아래와 같습니다. 1. vector를 정의해주는데 벡터 내 인덱스의 뜻은 N을 사용한 횟수입니다. ex) [1] -> N 1번 사용, [5] -> N 5번 사용 2. 1 ~ 8까지 반복문을 돌리며 1번에서 정의한 벡터의 인덱스에 N으로 i번 이어진 숫자를 넣어줍니다. 2.1 N을 j번 쓴 숫자와 N을 (i - j)번 쓴 숫자에 대해 사칙연산을 진행하면 N을 i번 쓴 숫자를 구할 수 있으므로 해당 조합을 모두 벡..

[Programmers 코딩테스트 고득점 Kit] H-Index

문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/42747 코딩테스트 연습 - H-Index H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표 programmers.co.kr 논문의 수가 최대 1,000편이고 논문별 인용 횟수가 최대 10,000회이므로 O(N * M)으로 풀 수 있는 간단한 정렬 문제였습니다. 개발환경:Visual Studio 2017 지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

[Programmers 코딩테스트 고득점 Kit] 가장 큰 수

문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/42746# 코딩테스트 연습 - 가장 큰 수 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 programmers.co.kr 정렬 기준을 잘 작성해야 하는 문제였습니다. 알고리즘은 아래와 같습니다. 1. numbers 벡터를 모두 string으로 변환한 string 벡터를 생성합니다. 2. 정렬을 하는데 정렬 기준은 두 문자열을 합쳤을 때 사전 순서 역순으로 정렬을 진행해줍니다. 3. 2번에서 정렬한 ..

[Programmers 코딩테스트 고득점 Kit] 순위

문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/49191 코딩테스트 연습 - 순위 5 [[4, 3], [4, 2], [3, 2], [1, 2], [2, 5]] 2 programmers.co.kr BFS를 이용하는 문제였습니다. 알고리즘은 아래와 같습니다. 1. results 벡터를 순회하면서 각 선수를 이긴 선수들을 저장하는 벡터 winners와 각 선수한테 진 선수들을 저장하는 벡터 losers를 정의해줍니다. 2. 각 선수들에 대해 BFS를 진행해주면서 (그 선수를 이긴 선수들의 합) + (그 선수한테 진 선수들의 합) = n - 1이라면 순위가 정해진 것입니다. 3. 2번을 통해 구한 순위가 정해진 선수들의 수를 반환해줍니다. 개발환경:..

[Programmers 코딩테스트 고득점 Kit] 방의 개수

문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/49190 코딩테스트 연습 - 방의 개수 [6, 6, 6, 4, 4, 4, 2, 2, 2, 0, 0, 0, 1, 6, 5, 5, 3, 6, 0] 3 programmers.co.kr arrows 벡터 크기가 최대 100,000이므로 이차원 배열 대신 map을 사용해야하는 문제였습니다. 알고리즘은 아래와 같습니다. 1. 정점과 간선을 나타내는 구조체를 정의하고 해당 구조체에 대한 visited map을 선언해줍니다. 2. arrows 벡터를 순회하면서 정점과 간선들을 방문했다고 표시해줍니다. 2.1 해당 정점은 이미 방문했지만 아직 해당 간선을 방문하지 않은 상태라면 사이클을 형성한 것이므로 방 개수..

[Programmers 코딩테스트 고득점 Kit] 가장 먼 노드

문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/49189 코딩테스트 연습 - 가장 먼 노드 6 [[3, 6], [4, 3], [3, 2], [1, 3], [1, 2], [2, 4], [5, 2]] 3 programmers.co.kr BFS를 이용하여 푸는 문제였습니다. 알고리즘은 아래와 같습니다. 1. 양방향 그래프를 입력받습니다. 2. 1번 노드로부터 BFS를 진행하는데 2.1 제일 먼 거리가 갱신될 경우 기존에 제일 멀었던 노드들이 속해있는 벡터를 지우고 다시 해당 노드를 벡터에 추가해주고 2.2 현재 노드로부터 1번 노드까지의 거리가 제일 먼 거리와 동일할 경우 벡터에 해당 노드를 추가해줍니다. 3. 노드의 개수를 구해야 하므로 벡터의 ..

[Programmers 코딩테스트 고득점 Kit] 베스트앨범

문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/42579 코딩테스트 연습 - 베스트앨범 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가 programmers.co.kr 해쉬와 정렬을 이용하여 푸는 문제였습니다. 알고리즘은 아래와 같습니다. 1. 각 genre마다 고유의 번호를 부여하고 각 장르를 인덱스로 하는 벡터에 노래를 추가해줍니다. 2. 1번에서 구한 벡터를 토대로 각 genre마다 재생된 노래의 총합을 구해줍니다. 3. 문제에서 주어진 조건대로 genre를 정렬하고 3.1 정렬된 순서로 각 genre..

[Programmers 코딩테스트 고득점 Kit] 위장

문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/42578 코딩테스트 연습 - 위장 programmers.co.kr 해쉬와 조합을 이용하는 문제였습니다. 알고리즘은 아래와 같습니다. 1. map을 이용하여 의상 타입을 int로 변환하고 각 의상 타입이 몇 개씩 있는지 파악합니다. 2. 결과를 구하기 위해서는 조합 공식을 써야하는데 해당 공식은 (의상 타입1 + 1) * (의상 타입 2 + 1) *... * (의상 타입 N + 1) - 1입니다. 3. 위 조합 공식을 이용해 답을 구하고 반환해줍니다. 개발환경:Visual Studio 2017 지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

[Programmers 코딩테스트 고득점 Kit] 전화번호 목록

문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/42577 코딩테스트 연습 - 전화번호 목록 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조 programmers.co.kr N이 1,000,000이지만 전화번호 길이가 최대 20이기 때문에 O(N * 20)으로 풀 수 있는 문제였습니다. 알고리즘은 아래와 같습니다. 1. phone_book 벡터 내 전화번호들을 set에 넣어주고, 각 전화번호와 인덱스를 매핑해줄 map을 정의해줍니다. 2. phone_book 벡터 내 전화번호들을 순회하며 각 전화번호의 길이를 ..