본문 바로가기

PS36

백준 9466번 C++ 텀 프로젝트 텀 프로젝트https://www.acmicpc.net/problem/9466이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와 같이 한 팀만 있을 수도 있다. 프로젝트 팀을 구성하기 위해, 모든 학생들은 프로젝트를 함께하고 싶은 학생을 선택해야 한다. (단, 단 한 명만 선택할 수 있다.) 혼자 하고 싶어하는 학생은 자기 자신을 선택하는 것도 가능하다.학생들이(s1, s2, ..., sr)이라 할 때, r=1이고 s1이 s1을 선택하는 경우나, s1이 s2를 선택하고, s2가 s3를 선택하고,..., sr-1이 sr을 선택하고, sr이 s1을 선택하는 경우에만 한 팀이 될 수 있다.예를 들.. 2019. 6. 15.
백준 7576번 C++ 토마토 토마토https://www.acmicpc.net/problem/7576철수의 토마토 농장에서는 토마토를 보관하는 큰 창고를 가지고 있다. 토마토는 아래의 그림과 같이 격자 모양 상자의 칸에 하나씩 넣어서 창고에 보관한다. 창고에 보관되는 토마토들 중에는 잘 익은 것도 있지만, 아직 익지 않은 토마토들도 있을 수 있다. 보관 후 하루가 지나면, 익은 토마토들의 인접한 곳에 있는 익지 않은 토마토들은 익은 토마토의 영향을 받아 익게 된다. 하나의 토마토의 인접한 곳은 왼쪽, 오른쪽, 앞, 뒤 네 방향에 있는 토마토를 의미한다. 대각선 방향에 있는 토마토들에게는 영향을 주지 못하며, 토마토가 혼자 저절로 익는 경우는 없다고 가정한다. 철수는 창고에 보관된 토마토들이 며칠이 지나면 다 익게 되는지, 그 최소 일.. 2019. 6. 14.
백준 1012번 C++ 유기농 배추 유기농 배추https://www.acmicpc.net/problem/1012차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 효과적인 배추흰지렁이를 구입하기로 결심한다. 이 지렁이는 배추근처에 서식하며 해충을 잡아 먹음으로써 배추를 보호한다. 특히, 어떤 배추에 배추흰지렁이가 한 마리라도 살고 있으면 이 지렁이는 인접한 다른 배추로 이동할 수 있어, 그 배추들 역시 해충으로부터 보호받을 수 있다.(한 배추의 상하좌우 네 방향에 다른 배추가 위치한 경우에 서로 인접해있다고 간주한다)한나가 배추를 재배하는 땅은 고르지 못해서 배추를 군데군데 심어놓았다. 배추들이 모여있는 곳에는 .. 2019. 6. 12.
백준 4963번 C++ 섬의 개수 섬의 개수https://www.acmicpc.net/problem/4963정사각형으로 이루어져 있는 섬과 바다 지도가 주어진다. 섬의 개수를 세는 프로그램을 작성하시오.한 정사각형과 가로, 세로 또는 대각선으로 연결되어 있는 사각형은 걸어갈 수 있는 사각형이다. 두 정사각형이 같은 섬에 있으려면, 한 정사각형에서 다른 정사각형으로 걸어서 갈 수 있는 경로가 있어야 한다. 지도는 바다로 둘러쌓여 있으며, 지도 밖으로 나갈 수 없다. 푸는 법DFS 혹은 완전 탐색으로 풀면 된다고 한다.(i, j)의 위치에서 인접해있는 8개의 위치를 조사해서 탐색해나가면 되는 문제다.map[i][j]이 0이 아니라면 map[i][j]에 0을 대입하고 주변을 탐색한다.map[i][j]=0은 이미 방문한 섬이므로 중복을 방지하기.. 2019. 6. 12.
백준 1707번 C++ 이분 그래프 이분 그래프https://www.acmicpc.net/problem/1707그래프의 정점의 집합을 둘로 분할하여, 각 집합에 속한 정점끼리는 서로 인접하지 않도록 분할할 수 있을 때, 그러한 그래프를 특별히 이분 그래프 (Bipartite Graph) 라 부른다.그래프가 입력으로 주어졌을 때, 이 그래프가 이분 그래프인지 아닌지 판별하는 프로그램을 작성하시오. 푸는 법이분 그래프인지 확인하는 법알고리즘 검색하다 보면 꼭 나오는 이 분의 블로그를 보고 그냥 이대로만 하면 맞을 수 있다.주의할 점은 테스트 케이스를 실행할 때마다 그래프와 체크를 초기화해주는 것이다.나는 DFS로 풀었고, 만약 start의 색깔과 next의 색깔이 이미 존재하고(둘다 방문했고) 색깔이 같으면 재귀문을 빠져나와 answer이 N.. 2019. 6. 12.
백준 11004번 C++ K번째 수 K번째 수https://www.acmicpc.net/problem/11004수 N개 A1, A2, ..., AN이 주어진다. A를 오름차순 정렬했을 때, 앞에서부터 K번째 있는 수를 구하는 프로그램을 작성하시오. 문제는 간단해보였는데...아마 이걸 푸는 사람들을 기다리는 건 시간초과일 것이다.그냥 알고리즘 헤더에 있는 소트함수로 하면 될 것 같았는데 안 돼서 오늘 Min Heap으로 풀었다.그랬더니 아슬아슬하게 통과.radix sort를 이용하면 시간복잡도는 O(dn) (d: 데이터의 가장 큰 자리수, n: 데이터수)이라고 한다. 더 빠르게 풀 수 있을 듯우선순위 큐 최고...시간초과 참고는 여기 코드123456789101112131415161718#include #include using namespa.. 2019. 6. 10.
백준 10824번 C++ 네 수 네 수https://www.acmicpc.net/problem/10824네 자연수 A, B, C, D가 주어진다. 이때, A와 B를 붙인 수와 C와 D를 붙인 수의 합을 구하는 프로그램을 작성하시오.두 수 A와 B를 합치는 것은 A의 뒤에 B를 붙이는 것을 의미한다. 즉, 20과 30을 붙이면 2030이 된다. 이게 정답률이 37퍼?이유가 다 있는 거다.입력 조건을 무시하고 풀면 이렇게 된다. 첫째 줄에 네 자연수 A, B, C, D가 주어진다. (1 ≤ A, B, C, D ≤ 1,000,000) 이 조건을 무시하고 그냥 풀었을 때, 만약 백만을 이어 붙이게 되면10000001000000이 되는데, 이는 stoi로 변환했을 때 범위를 초과하므로(int로 변환) 런타임 에러가 날 수밖에 없다.저 조건만 주.. 2019. 6. 7.
백준 2225번 C++ 합분해 합분해https://www.acmicpc.net/problem/22250부터 N까지의 정수 K개를 더해서 그 합이 N이 되는 경우의 수를 구하는 프로그램을 작성하시오.덧셈의 순서가 바뀐 경우는 다른 경우로 센다(1+2와 2+1은 서로 다른 경우). 또한 한 개의 수를 여러 번 쓸 수도 있다. 생각하는 과정아직도 dp를 잘 못 이해하고 있었던 건지 ㅠㅠ 이상하게 풀려고 했었다.끄적거리다가 맥도날드가 시끄러워서 견딜 수 없게 되었을 즈음 이렇게 하면 되는구나 생각이 났다. 예를 들어, 0부터 5까지의 정수 4개를 이용하여 5를 만든다고 해보자.그러면 처음에는1000010000100001로 시작할 수 있다.이 네 개를 단위벡터 단위행렬... 처럼 하나의 단위로 생각하고 2번째도 구하면 된다.1000+1000=.. 2019. 6. 2.
백준 9461번 C++ 파도반 수열 파도반 수열오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의 길이를 k라 했을 때, 그 변에 길이가 k인 정삼각형을 추가한다.파도반 수열 P(N)은 나선에 있는 정삼각형의 변의 길이이다. P(1)부터 P(10)까지 첫 10개 숫자는 1, 1, 1, 2, 2, 3, 4, 5, 7, 9이다.N이 주어졌을 때, P(N)을 구하는 프로그램을 작성하시오. 생각하는 과정그냥 나열해 보면 된다.규칙은 바로 보이는데 이게 맞나 싶어서 계속 나열해 보았다. 11 ->11 1 ->11 1 1->1+11 1 1 2->1+11 1 1 2 2->1+2 4차이1 1 1 2 2 3->1+3 4차.. 2019. 6. 1.