본문 바로가기

C++

(5)
C++ 백준 13160 (최대 클리크 구하기) 백준 13160 (최대 클리크 구하기) https://www.acmicpc.net/problem/13160 13160번: 최대 클리크 구하기 그래프 이론에서 클리크란, 완전 그래프인 부분 그래프를 의미한다. 즉, 정점으로 이루어진 집합 중 모든 두 정점 사이에 간선이 있는 집합을 의미한다. 최대 클리크는 그러한 집합 중 크기가 가 www.acmicpc.net 클리크란 어떤 그래프내에 존재하는 sub 완전그래프이다. 여기서 완전그래프란 모든 노드가 서로 연결되어있는 그래프를 뜻한다. 설명 문제에서 가져온 그림이다. 직선들을 쭉 나열했을 때 가장 많이 겹치는 부분에서의 포함되는 숫자를 찾으면 되는 것이다. 위의 경우에는 빨간 세로선일때 1 2 4가 겹쳐지면서 가장 많이 겹쳐질 때 이므로 최대 클리크는 1 2..
C++ 백준 16496 (큰 수 만들기) 백준 16496 (큰 수 만들기) https://www.acmicpc.net/problem/16496 16496번: 큰 수 만들기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 리스트에 포함된 수가 주어진다. 수는 공백으로 구분되어져 있고, 1,000,000,000보다 작거나 같은 음이 아닌 정수 이다. 0을 제외한 나 www.acmicpc.net 간단한 정렬을 통해 풀 수있는 문제였다. 프로그래머스에도 똑같은 문제가 있는데, 프로그래머스에서 풀다가 백준에 똑같은 문제가 있길래 이 문제로 설명을 하겠다. 설명 아이디어는 간단하다. 어떤 문자열 A와 B가 있을 때 A+B가 큰지 B+A가 큰지를 비교해 정렬을 하면 된다. 아이디어는 참 간결하고 구현도 쉬운데 왜 티어가 플래티넘..
C++ 백준 2503 (숫자 야구) 백준 2503 (숫자 야구) https://www.acmicpc.net/problem/2503 2503번: 숫자 야구 첫째 줄에는 민혁이가 영수에게 몇 번이나 질문을 했는지를 나타내는 1 이상 100 이하의 자연수 N이 주어진다. 이어지는 N개의 줄에는 각 줄마다 민혁이가 질문한 세 자리 수와 영수가 답한 스트 www.acmicpc.net 간단하게 브루트포스로 해결가능한 문제였다. 처음에 문제를 보고 각 스트라이크와 볼에 대해 경우의 수를 빠르게 줄여볼 방법을 생각했지만 string의 길이가 3이고 전체 수가 1000도 안된다는 점을 보고 그냥 브루트포스로 접근했다. (그래도 0ms가 나오더라..) 설명 설명이라고도 하기 쪼끔 민망하지만 설명해보자면 다음과 같다. 인풋이 세자리 string과 스트라이크,..
C++ 백준 2533 (사회망 서비스 SNS) 백준 2533 (사회망 서비스 SNS) https://www.acmicpc.net/problem/2533 2533번: 사회망 서비스(SNS) 첫 번째 줄에는 친구 관계 트리의 정점 개수 N이 주어진다. 단, 2 ≤ N ≤ 1,000,000이며, 각 정점은 1부터 N까지 일련번호로 표현된다. 두 번째 줄부터 N-1개의 줄에는 각 줄마다 친구 관계 트리의 에 www.acmicpc.net 친구들간의 관계를 그래프로 표현해서 풀 수 있는 문제였다. 또한 중복되는 연산을 막기위해 DP를 사용하는데 설명에서 언급하겠다. 설명 문제 조건을 보면 얼리어답터가 아닌 사람들의 친구들은 무조건 얼리어답터여야 한다. 또한 얼리어답터가 아닌 사람들의 친구들은 얼리어답터이거나 아니어도 된다. 언뜻보면 이분그래프를 생각할 수 있지..
BFS(Breadth-First Search) 설명 탐색을 위해 사용되는 알고리즘이다. 이름에서 알 수 있듯이, 너비를 우선으로 탐색하기 때문에 단계적인 탐색을 위해 사용된다. 여기서 탐색이란, 대표적으로 그래프에서 정점 방문을 예로 들 수 있다. 또한, 어떤 작업의 처리에 대한 최소 단계 등을 요구하는 문제에서도 사용될 수 있다. BFS를 구현하기 위해선 Queue가 필요하다. Queue는 선입선출으로 동작하기 때문에 가장 먼저 방문했던 단계의 이웃을 우선으로 탐색할 수 있다. 예제 보며 이해해보자. 다음과 같은 그래프가 있다. 정점1에서 시작해 그래프에 존재하는 모든 정점을 방문할 것이고, 한 정점에서 또 다른 정점은 간선을 통해 이동할 수 있다. 이때, 정점1에서 출발하여 각 정점 단계적으로 모두 방문하고 싶다. 단계적인 탐색이 필요하므로, B..