본문 바로가기

Programming456

#1492 합 이번 문제는 Platinum II로 꽤 높게 책정된 문제입니다. 문제 자체는 상당히 쉽습니다. 1부터 n까지 \(n^k\)의 합을 구하라는 문제입니다. 여기서는 파스칼의 삼각형과 연관된 이항계수에 대해서 먼저 알고 있어야 합니다. 이항 계수는 n개에서 r개를 고르는 경우의 수를 나타내는 것으로 \( _nC_r \)로 표현됩니다. 이항 계수를 바로 구할 수도 있겠지만, 저는 프로그램에서는 파스칼의 삼각형을 이용했습니다. n이 최대 51까지밖에 안 되기되문에 크게 문제가 없습니다. 더 크다면 이항 계수를 구하기 위해서는 별도의 방법을 이용해야 합니다. 다음 코드는 파스칼 삼각형을 이용해서 주어진 n에 대해서 이항계수를 구하는 것입니다. 사실 그냥 for 루프를 이용해서 작성할 수 있겠지만, 여기서는 동적 계.. 2022. 8. 21.
#1489 대결 이번 문제는 Gold I 문제네요. A팀과 B팀이 n명의 사람들이 각각 1:1 대결해서 승패를 가리는데, 이기면 2점, 비기면 1점, 지면 0점을 받게 됩니다. 승부를 벌이는 두 사람의 능력치로 승패가 좌우되는데, 높은 능력치가 이기고, 능력치가 같으면 비기게 됩니다. 승부를 벌이는 두 팀의 n명의 능력치를 알고 있을 때, A팀이 얻을 수 있는 최대 점수를 계산하는 것이 목표입니다. 제가 생각한 방법은, 첫번째로 두 팀을 모두 정렬을 합니다. 두번째로 동적 계획법을 이용해서 A 팀이 얻을 수 있는 최대 점수를 구한다입니다. A 팀의 능력치를 오름차순으로 정렬했을 때, \( a_1, a_2, ..., a_n \)이라고 하고 B 팀 역시 \( b_1, b_2, ..., b_n \) 이라고 할 때, 다음과 같.. 2022. 8. 19.
#1476 날짜 계산 이번 문제는 난이도는 Silver V로 쉬운 편입니다. 수학적 지식을 가지고 있다면 손쉽게 풀 수 있습니다. E, S, M 이란 단위가 1부터 시작해서 각각 15, 28, 19 의 범위를 가지는데, 모두 같이 증가하기 시작해서 16이 되면 E의 값은 1이 됩니다. 즉 다음과 같이 움직이게 되죠. 1 1 1 -> 2 2 2 -> 3 3 3 -> ... -> 15 15 15 -> 1 16 16 -> 2 17 17 -> ... -> 4 19 19 -> 5 20 1 -> ... 우리가 얻고자 하는 숫자가 x년도라면, E, S, M은 다음과 같이 표현할 수 있습니다. \[ ( (x-1)~ mod~ 15 + 1, (x-1)~ mod~ 28 + 1, (x-1)~ mod~ 19 + 1 ) \] 15, 28, 19 는 .. 2022. 8. 19.
#1475 방 번호 이번 문제는 Silver V 수준이라고 되어 있지만, 그것보다는 조금 더 쉬운 듯 합니다. 방번호를 하나 주고, 그 방번호를 0부터 9까지의 숫자를 이용해서 표현하기 위해서는 몇개의 숫자셋이 필요한가입니다. 예를 들어서 3457 이란 숫자이면 하나의 숫자셋으로 표현이 가능하죠. 숫자들이 몇번 나타났는지 세면 가장 좋겠죠. 단 6과 9는 혼용해서 쓸 수 있으므로, 6과 9의 숫자 개수는 더한 다음 2로 나누면 됩니다. 홀수인 경우에는 1 많게 하기 위해서, \[ \lfloor (n(6) + n(9) + 1)/2 \rfloor \] 형태로 사용토록 합니다. 다음은 제가 작성한 코드입니다. 코드는 참조용으로만 봐주세요. //------------------------------------------------.. 2022. 8. 18.
#1464 뒤집기 3 이 문제는 Gold V 문제입니다. 문자열이 주여졌을 때, 처음 1글자를 뒤집을 수도 있고, 아닐 수도 있습니다. 다음에는 처음 2글자를 뒤집을 수도 있고 아닐 수도 있죠. 이렇게 해서 총 글자수대로 뒤집을 수도 있고 아닐 수도 있습니다. 예를 들어서 "CDEFA" 란 문자열이 주어진다면, 1글자에서는 뒤집지 않는다를 선택하면 "CDEFA" 그대로 나오겠죠. 2글자에서 뒤집기를 한다면, "CD"가 뒤집혀서 "DCEFA"가 됩니다. 3글자에서 뒤집지 않는다를 선택하면 그대로 유지되고 4글자에서 뒤집기를 한다면, "DCEF"가 뒤집혀서 "FECDA"가 됩니다. 5글자에서 뒤집기를 한다면, "ADCEF"가 나옵니다. 이렇게 뒤집기를 선택했을 때 나올 수 있는 단어중 가장 앞에 나오는 단어를 얻도록 만드는 것이.. 2022. 8. 18.
#1457 정확해 정확해라는 문제는 약수들의 합을 구하는 문제입니다. 난이도는 Gold I 문제이긴 하지만, 이게 수학적인 이해를 하지 못 하면 조금 어렵습니다. 그래서인지 정답자가 제가 푼 시점에서는 40명에 그칩니다. 약수의 개수를 구하는 문제는 꽤 어렵습니다. \[ \sigma_0(n) = n( \lbrace x | n~ mod~ x = 0 \rbrace ) \] 으로 약수를 구하는 식을 사용한다면, \(\sqrt{n}\)에 해당하는 만큼 약수가 되는 개수를 구하던지, 소인수 분해를 해주어야 합니다. 그런데 만약 1 부터 n까지의 약수들의 개수의 합을 구하라는 문제라면 어떨까요? \[ S(n) = \sum_{k=1}^{n} \sigma_0(k) \] 하나의 수의 약수의 개수를 구하는 것도 어려운데, 일정 숫자 범위의.. 2022. 8. 16.
728x90