하루하루 꾸준히, 인생은 되는대로

알고리즘 133

프로그래머스 베스트 앨범

문제를 보면 주어진 요구사항은 크게 4가지로 나뉜다. 장르별로 최대 2개씩까지만 앨범에 들어간다. 속한 노래가 많이 재생된 장르를 먼저 수록한다. 장르 내에서 많이 재생된 노래를 먼저 수록한다. 장르 내에서 재생횟수가 같은 노래끼리는 고유번호가 낮은 노래를 수록한다. 장르별로 구분을 해야하기 떄문에 Map을 사용할 수 있다. map의 키로 장르를 선택하고 값으로 해당 장르의 재생횟수, 고유번호 리스트를 선택할 수 있다. 입출력 예 문제에서 예를 들어보자. 처음 클래식이라는 장르가 보인다. map에 {클래식,{500번,처음 고유번호인0}}을 저장한다. 다음으로 Pop이라는 또 다른 새로운 장르가 보인다. 마찬가지로 map에 {팝,{600번,고유번호 1}}을 저장한다. 다음으로 클래식이라는 이미 존재하는 장..

알고리즘 2023.06.07

위상정렬(Topological sort)

위상정렬은 먼저 비순환 방향 그래프 DAG에서만 사용 가능합니다. 그래프 이론에서 DAG는 노드와 노드간의 방향성을 가진 간선으로 구성된 그래프를 의미합니다. 각 간선이 하나의 노드에서 다른 노드로 방향을 가지며, 일방통행을 합니다. 또한 그래프 내에서 절대 사이클이 없는 것을 의미합니다. 즉, DAG는 방향성이 있고 사이클이 없는 그래프라고 볼 수 있습니다. 위상정렬 위상정렬은 순서가 정해진 작업을 차례대로 수행할때 순서를 결정해주는 알고리즘입니다. 예를 들어서, 라면을 끓이기 위해 물을 먼저 끓어야 합니다. 이때 물을 먼저 끓인다 -> 라면을 끓인다 라는 작업간의 선행 순서가 존재하고 이 선행 순서를 정해주는 알고리즘입니다! 또한 그래프에는 진입차수(In-Degree)와 진출차수(Out-Degree)..

알고리즘 2023.05.29

이분 그래프와 판별법

이분 그래프란? 이분 그래프는 노드가 두 개의 그룹으로 분리되어 있는 그래프를 말한다. 인접한 정점끼 서로 다른 색으로 색칠하여 모든 정점을 두 가지 색으로만 칠할 수 있는 그래프이다. 철수부터 색을 칠하면 인접한 정점은 철수와 반대되는 색으로 칠한다 철수와 인접한 수학은 주황색으로 칠해진다. 다시 수학과 인접한 영희를 수학과 반대되는 파란색으로 칠하고 영희와 인접한 국어를 주황색으로, 국어와 인접한 세희를 파란색으로..쭉쭉 칠하면 모든 정점을 두 가지의 각기 다른 색으로 칠할 수 있다.이러한 그래프를 이분 그래프라고 부른다. 모든 정점을 방문하며 간선을 검사하기 때문에 시간 복잡도는 O(V+E)로 그래프 탐색 알고리즘과 같다. 이분 그래프의 판별법 서로 인접한 정점이 같은 색이면 이분 그래프가 아니다!..

알고리즘 2023.03.15

프로그래머스 덧칠하기 C++

https://school.programmers.co.kr/learn/courses/30/lessons/161989 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 스위핑 문제같아서 스위핑을 사용해서 접근했다 처음구간을 section의 처음으로 잡고 끝 구간을 처음 구간 + m -1로 잡는다 그 후 secion배열을 돌면서 만약 section이 끝 구간 보다 길다면, 새로 덧칠해야 하므로 처음 구간과 끝 구간을 각각 갱신해 주었다 #include #include //n미터의 벽 //1부터 N까지 구역 //롤러의 길이는 M임 //3456 -> 1234 //1..

알고리즘 2023.03.03

프로그래머스 뒤에 있는 큰 수 찾기 C++

https://school.programmers.co.kr/learn/courses/30/lessons/154539 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 스택을 이용해서 해결하였습니다. #include #include #include #include using namespace std; vector solution(vector numbers) { vector answer; stack st; for(int i = numbers.size()-1;i>=0;i--){ if(st.empty()){ answer.push_back(-1); st.push(nu..

알고리즘 2023.01.31

프로그래머스 튜플 C++

https://school.programmers.co.kr/learn/courses/30/lessons/64065?language=cpp 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 몇번의 시행착오를 겪었다. 처음에 내가 든 생각은 다음과 같다. "{{2},{2,1},{2,1,3},{2,1,3,4}}" 1 먼저 문자열로 입력이 들어오는데, 괄호를 제외한 순수한 문자열을 얻는다. (위의 경우 "2","21","213","2134"순으로 괄호를 제외해서 문자열을 얻는다) 2 문자열을 크기 순으로 정렬한다. 3 크기 순으로 정렬된 문자열이 있다면, 다음 크기..

알고리즘 2023.01.29

프로그래머스 뉴스 클러스터링 C++

https://school.programmers.co.kr/learn/courses/30/lessons/17677 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브는 사용자들이 편리하게 다양한 뉴스를 찾아볼 수 있도록 문제점을 개선하는 업무를 맡게 되었다. 개발의 방향을 잡기 위해 튜브는 우선 최근 화제가 되고 있는 "카카오 신입 개발자 공채" 관련 기사를 검색해보았다. 카카오 첫 공채..

알고리즘 2023.01.16

프로그래머스 키패드 누르기 C++

https://school.programmers.co.kr/learn/courses/30/lessons/67256 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 스마트폰 전화 키패드의 각 칸에 다음과 같이 숫자들이 적혀 있습니다. 이 전화 키패드에서 왼손과 오른손의 엄지손가락만을 이용해서 숫자만을 입력하려고 합니다. 맨 처음 왼손 엄지손가락은 * 키패드에 오른손 엄지손가락은 # 키패드 위치에서 시작하며, 엄지손가락을 사용하는 규칙은 다음과 같습니다. 엄지손가락은 상하좌우 4가지 방향으로만 이동할 수 있으며 키패드 이동 한 칸은 거리로 1에 해당..

알고리즘 2023.01.05

백준 숫자고르기 C++

https://www.acmicpc.net/problem/2668 2668번: 숫자고르기 세로 두 줄, 가로로 N개의 칸으로 이루어진 표가 있다. 첫째 줄의 각 칸에는 정수 1, 2, …, N이 차례대로 들어 있고 둘째 줄의 각 칸에는 1이상 N이하인 정수가 들어 있다. 첫째 줄에서 숫자를 적절 www.acmicpc.net 그래프에서 사이클이 발생한다면, 정수를 뽑을 수 있습니다. 만약 n이 3이고, 입력이 {3,1,2}가 주어진다면, 그래프로 연결을 했을떄, 정점1은 사이클이 존재함을 확인할 수 있습니다(아래 그림을 통해 잘 사이클이 발생하는 것을 볼 수 있습니다) DFS에서 사이클을 찾는 방법은 아래의 블로그를 참고하였습니다. https://nicotina04.tistory.com/148 그래프에서 ..

알고리즘 2022.12.31

백준 숨바꼭질4 C++

https://www.acmicpc.net/problem/13913 13913번: 숨바꼭질 4 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net BFS를 했을 떄, 최단 거리를 역추적하는 문제입니다. 먼저 주어진 n과 k를 입력받고, 최단거리 저장 배열 dt를 만들고 큰 값으로 초기화를 해주었습니다. void input(){ cin >> n >> k; for(int i = 0;i MAX || node < 0){ return false; } return true; } 이제 BFS함수를 정의해줍니다. void..

알고리즘 2022.12.27