목록분류 전체보기 (370)
GitHubSeob

문제 https://programmers.co.kr/learn/courses/30/lessons/77884 코딩테스트 연습 - 약수의 개수와 덧셈 두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주 programmers.co.kr 문제풀이 수가 제곱수인지 아닌지만 판별하면 된다. 제곱수의 경우는 무조건 약수의 개수가 홀수가 되고, 아닌 경우는 짝수가 된다. 제곱수인지 판별하기 위해 제곱근을 구하는 sqrt함수를 이용한다. double형 제곱근 - int형 제곱근을 해서 0이나 오면 제곱수이므로 그때만 answer -= idx, 이 ..

문제 https://programmers.co.kr/learn/courses/30/lessons/42889 코딩테스트 연습 - 실패율 실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스 programmers.co.kr 문제풀이 실패율은 스테이지를 클리어 못한 플레이어의 수 / 스테이지에 도달한 플레이어의 수이다. 여기서 i 스테이지를 클리어 못한 플레이어의 수는 stages벡터에서 i의 개수이고, 스테이지에 도달한 플레이어의 수는 i 스테이지를 지나간 플레이어의 수이다. 1번 스테이지의 경우 stages벡터에 1은 1개이고, 1 이상인 수가 8개이므로 실패율이 1/8이다..

문제 https://programmers.co.kr/learn/courses/30/lessons/1845 코딩테스트 연습 - 폰켓몬 당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다. programmers.co.kr 문제풀이 복잡해 보일 수 있는데 간단히 보면 경우의 개수가 아닌 몇 마리의 폰켓몬을 고를 수 있는지만 구하면 된다. 폰켓몬의 최대 개수를 넘으면 최대 개수를 출력하고 그렇지 않으면 폰켓몬의 종류의 개수를 출력하면 된다. 현재 인덱스의 값과 인덱스+1 값을 비교하면서 둘이 같으면 인덱스+1 값을 지운다. 그렇지 않으면 인덱스 값을 1 증가시켜 다음수를 탐색..

문제 https://www.acmicpc.net/problem/2022 2022번: 사다리 첫째 줄에 차례대로 x, y, c에 해당하는 양의 실수 세 개가 입력된다. 수는 소수점 여섯째 자리까지 주어질 수 있다. www.acmicpc.net 문제풀이 닮음을 이용하여 풀었다. 왼쪽 삼각형 오른쪽 삼각형 라는 식을 얻을 수 있다. 또 피타고라스 정리에 의해서 이후에 양변을 루트를 씌우면 h1, h2의 식을 구할 수 있다. 우리는 w1+w2인 값을 구해야한다. 이분탐색을 이용하여 이 값을 구한다. w1+w2를 이분탐색의 mid값으로 두고, h1과 h2값을 구하고 h1*h2/(h1+h2)값과 c값을 비교하면서 문제에 나온 오차가 10^-3 이하로 나오도록 조건을 건다. 코드 #include #include #i..

문제 https://www.acmicpc.net/problem/2512 2512번: 예산 첫째 줄에는 지방의 수를 의미하는 정수 N이 주어진다. N은 3 이상 10,000 이하이다. 다음 줄에는 각 지방의 예산요청을 표현하는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 값들은 모두 1 이상 www.acmicpc.net 문제풀이 예산을 모두 입력받았을 때, 국가예산을 넘지 않는다면 입력받은 예산 중 가장 큰 값을 출력하면 된다. 이 경우가 아니라면 이분탐색을 통해 값을 구해야 한다. 반복문을 통해 입력받은 예산과 상한액 중 작은 값을 sum에 더한다. sum 값이 국가예산의 총액보다 높으면 상한액을 낮춰야 하므로 right를 줄인다. sum 값이 국가예산의 총액 이하이면 상한액을 높여도 되므로 left..

문제 https://www.acmicpc.net/problem/2110 2110번: 공유기 설치 첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 xi (0 ≤ xi ≤ 1,000,000,000)가 www.acmicpc.net 문제풀이 이분 탐색을 하고 한번 진행하는 동안 반복문을 돌려 첫 집부터 마지막 집까지 돌면서 이전 공유기 설치된 집 +mid값 보다 더 긴 거리의 집이 있으면 공유기를 설치하는 식으로 문제를 풀어야 한다. for (idx; idx > house[idx]; sort(house.begin(), house.end()..

문제 https://www.acmicpc.net/problem/2805 2805번: 나무 자르기 첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보 www.acmicpc.net 문제풀이 자른 나무의 길이의 총합이 M이다. 0m짜리 톱으로 자를 수는 없으니 최솟값을 0으로, 최댓값은 1,000,000,000으로 둔다. while문을 돌면서 이번 차례에 자를 톱의 길이는 (최솟값+최댓값)/2로 두고, 나무 수만큼 돌면서 자른다. 이때 톱보다 긴 나무만 자를 수 있다. 자른 나무의 길이의 총합이 목표치보다 작으면 톱의 길이가 더 짧..

문제 https://www.acmicpc.net/problem/1654 1654번: 랜선 자르기 첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 www.acmicpc.net 문제풀이 랜선의 최소 길이는 1, 최대길이는 가장 긴 랜선 길이로 둔다. mid는 (min+max)/2로 두면서, mid 길이만큼 각 랜선들을 자르고 그 개수를 cnt변수에 저장한다. 랜선이 구하고자 하는 개수보다 적으면 더 짧게 잘라야 하므로 max길이를 mid-1만큼 줄인다. 반대로 랜선이 구하고자 하는 개수와 같거나 더 많으면 더 길게 자를 수 있는 경우를 ..

문제 https://www.acmicpc.net/problem/11662 11662번: 민호와 강호 민호와 강호가 2차원 좌표 평면 위에 있다. 민호는 점 A(Ax, Ay)에서 점 B(Bx, By)를 향해 걸어가고 있고, 강호는 점 C(Cx, Cy)에서 점 D(Dx, Dy)를 향해 걸어가고 있다. 민호와 강호는 동시에 출발하고, 민 www.acmicpc.net 문제풀이 민호의 시작 좌표 x, y를 m_start_x, m_start_y, 도착 좌표를 m_end_x, m_end_y로 두고 강호는 m->g로 바꿔서 둔다. 삼분 탐색의 1/3 지점은 mid1로, 2/3 지점은 mid2로 둔다. 오차가 10^-6까지 허용한다고 되어있으나 100번 정도 돌리면 어느 정도는 오차가 적을 거라 생각해서 100번만 돌리..