본문 바로가기

전체 목록!292

[BOJ] 14697번: 방 배정하기 14697번: 방 배정하기DP로도 풀어도 되고 범위가 굉장히 작기 때문에 Brute force로 풀어도 되는 문제이다.실력이 정말 부족하기 때문에 이런 Brute force 문제들도 많이 풀어 봐야겠다.12345678910111213141516171819202122232425262728#include using namespace std; int main(){ cin.sync_with_stdio(false), cout.sync_with_stdio(false); int b[3], n; for (int i = 0; i > b[i]; } cin >> n; for (int i = 0; i 2018. 4. 9.
[BOJ] 14696번: 딱지놀이 14969번: 딱지놀이 구현 문제다. 처음에 제출했을 때 틀려서 당황스러웠는데 알고보니 배열을 지역변수로 선언했기 때문에 쓰레기값이 있었던 것이였다. 변수의 초기화를 잘 해야 한다는 상식을 다시 상기 시켜준 문제이다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354#include char chk(int Aar[], int Bar[]) { if (Aar[4] > Bar[4]) return 'A'; else if (Aar[4] Bar[3]) return 'A'; else if (Aar[3] Bar[2]) return 'A'; else if (Aar[2] Bar[1]) return.. 2018. 4. 9.
정올 2013년 시도예선 중고등부 문제풀이 1! + 2! + 3! + ··· + 10!의 마지막 자리의 숫자는 어떻게도 볼 수 있냐면 1!, 2!,...,10!의 마지막 자리의 숫자의 합의 마지막 자리의 숫자로도 볼 수 있다. 그래서 Dn = n!의 마지막 자리의 숫자라고 놓으면 D1 = 1, D2 = 2, D3 = 6, D4 = 4, D5 = 0, D6 = 0, ..., D10 = 0이 된다. D5부터 0이 되는 이유는 D4가 4이기 때문에 5를 곱하면 0이 되고 그 뒤로도 계속 0이 되기 때문에 쭉 0이다.따라서 1 + 2 + 6 + 4 + 0 + 0 ... = 13이고, 답은 2번(3)이다. 1~9 = 4510~19 = 10 + 45 = 5520 ~ 29 = 20 + 45 = 6530 ~ 39 = 30 + 45 = 7585(40~49), 9.. 2018. 4. 8.
정올 2012년 시도예선 중고등부 문제풀이 24 = 7원 * 2 + 5원 * 2 26 = 7원 * 3 + 5원 * 1 31 = 7원 * 3 + 5원 * 2 33 = 7원 * 4 + 5원 * 1 1번 23원이 못 만들어진다. 총 경기 수 : 4 + 3 + 2 + 1 = 10 경기 하루 가능 경기 수: 2경기 10 / 2 = 5일 각 빈칸을 a,b,c,d,e라고 설정. b = 2c라서 b와 c가 되는 경우가 (2, 1), (4, 2)인데 b=2, c=1일 경우에는 만들어지지 않는다. (4, 2)일땐 a=3, b=4, c=2, d=5, e=1로 방정식이 일치하게 된다. *참고: 균형이 맞으려면 (왼쪽 무게)*(왼쪽 거리) = (오른쪽 무게)*(오른쪽 거리)여야 한다. 방정식으로 두고 풀면 되긴 한데 방정식을 세웠다고 해서 연산을 통해 풀리는 건 아니고.. 2018. 4. 7.
정올 2011년 시도예선 중고등부 문제풀이 정올 2011년 중고등부 예선 풀이어떤 밭을 일구는데, 세 사람 A, B, C가 혼자 밭을 일구면 각각 2시간, 3시간, 6시간이 걸린다. A, B, C 세 사람이 함께 이 밭을 일구면 몇 시간이 걸리는가? [풀이]: A가 시간 당 1/2, B는 1/3, C는 1/6 만큼 일한다. 따라서 A,B,C가 동시에 일하는 건 hour(A+B+C) = 1이므로 hour = 1 아버지와 아들의 나이 합은 85이다. 과거에 아버지가 아들의 나이였을 때, 아버지의 나이는 아들의 나이의 6배이었다. 아버지와 아들의 나이 차는 얼마인가? [풀이]: a: 아버지의 나이, b: 아들의 나이. a+b=85, a-x = 6(b-x) = b를 계산하면 a=55, b=20이므로 a-b=25이여서 답은 4번(25)가 된다. (13)1.. 2018. 4. 7.
정올 2008년 시도예선 중고등부 문제풀이 2008년도 풀이 수열 1, 3, 6, 11, 19, 31, 48, ( )이면 (+2, +3, +5, +8, +12, + 17) -> 이 수열의 계차 수열 (1, 2, 3, 4, 5) 따라서 다음 수는 +6이여야 하고 17 + 6 = 23, 48 + 23 = 71. 답은 71이된다. B, A를 곱했을 때 일의 자리에 B가 나오기 위해서는 A, B 중에 하나가 1이면 편하게 구할 수 있다. A는 1이고 B는 1을 제외한 나머지 수가 될 수 있는데 4번째 줄 B C가 되려면 B*B의 값이 10을 넘으면 안된다. 따라서 B는 2 또는 3이된다. A=1,B=2일 경우 252가 나오는데 E와 B가 같은 수가 될 수 없으므로 B=2일 때는 틀렸다. 따라서 A=1, B=3이다. 이 값을 계산하면 403이 나오고 D는.. 2018. 4. 6.
정올 2007년 시도예선 중고등부 문제풀이 2007 시도예선 중고등부 문제풀이 한 변에 11그루를 세울 수 있지만 4방향에 세울 경우, 4번의 중첩이 생기므로 44 - 4 = 40이므로 답은 3번이다. A*B의 일의 자리 수가 7이므로 경우의 수를 세보면 3 x 9가 이상적이다. 또한 AB x BA 이므로 A=3, B=9여도 되고 A=9, B=3이여도 된다. 따라서 3 + 9 = 12, 답은 4번이다. 삼각형의 세 번이 가장 많이 지나가는 경우를 찾으면 된다. 답은 5번 역으로 계산하면 된다. A ◎ 4를 A'로 놓고 A' ◎ 5 = 3을 계산하면 A'가 나올 수 있는 수가 15,16,17,18,19가 나온다. A ◎ 4 = 15,16,17,18,19이니깐 4*5=20 답은 5번이다. 20 x 4 + 30 + 10π(코너); 코너 계산법(2 x .. 2018. 4. 6.
[BOJ] 13241번: 최소공배수 13241번: 최소공배수풀이gcd와 lcm을 알고 있으면 되는 문제다. 최소공배수는 주어진 정수 a, b에서 lcm(a, b) = a * b / gcd(a, b)이다.최대공약수는 유클리드 호제법을 사용하면 된다. 정수 m, n(m > n)이 주어질 때 gcd(m, n)은1234long long int gcd(long long int a, long long int b){ return b ? gcd(b, a % b) : a;} 다음과 같이 구현할 수 있다. 자세한 내용과 증명 과정은 링크를 참고하면 된다. 코드123456789101112131415161718192021#include long long int gcd(long long int a, long long int b){ return b ? gcd(b,.. 2018. 4. 1.
C# 프로그래밍 첫걸음(1) *참고: C/C++/Java(조금)을 배운 제가 C#을 처음 배우면서 알아둬야 할 것 같다고 생각한 것만 적어뒀습니다.Chapter 1 C# 프로그래밍 첫걸음 라이브러리와 프레임 워크의 차이 라이브러리는 미리 만들어진 코드라고 할 수 있다. 개발자가 사용해야지만 작동한다. 프레임워크는 최근 들어서는 프레임워크 = 대규모의 라이브러리라고도 하지만 처음 배우는 입장에서는 명확하게 짚고 넘어갈 필요가 있다고 했다. 프레임워크란 제어 역전이 있는 대규모의 라이브러리이다. 즉, 프로그램의 초기화부터 종료까지의 흐름을 직접 관리하게 된다. 출력함수 Console.Write(); // 출력함수 Console.WriteLine(); // 출력함수 + 기본적으로 문단 끝에 개행 문자 추가 Chapter 2 C#의 기본[.. 2018. 3. 31.
읽고 말하기 수열(개미 수열) C# 구현 읽고 말하기 수열 C# 구현 베르나르 베르베르 작가의 《개미》에서 소개되어서 유명해졌다고 위키피디아에 적혀 있다. 나도 어렸을 때 한 번 본 것 같은데 그 땐 프로그래밍을 안 했겠지..? 규칙 첫 번째 수열: 1 두 번째 수열: 1이 1개 = 11 세 번째 수열: 1이 2개 = 12 네 번째 수열: 1이 1개 2가 1개 = 1121 다섯 번째 수열: 1이 2개 2가 1개 1이 1개 = 122111 여섯 번째 수열: 1이 1개 2가 2개 1이 3개 = 112213 . . . 이런 규칙을 갖고 있는 수열이다. 처음에는 string으로 하려고 했지만 너무나 삽질을 하고 int[]로 돌아갔다... ㅠ 배열을 두 개 만들어서 arr1을 중심으로 두고 arr2를 다른 숫자가 나올 때마다 count를 저장해주는 용도.. 2018. 3. 31.
[BOJ] 11728번: 배열 합치기 11728번: 배열 합치기풀이한 배열에 다 받고 정렬, 출력!코드12345678910111213#include #include int A, B, Arr[2000001];int main(){ scanf("%d %d", &A, &B); A += B; for (int i = 0; i 2018. 3. 29.
[BOJ] 13866번: 팀 나누기 13866번: 팀 나누기풀이(1, 2), (3, 4) -> 비교(1, 3), (2, 4) -> 비교(1, 4), (2, 3) -> 비교코드123456789101112131415161718192021222324252627282930#include inline int min(int a, int b){ return a 0 ? a : -a;}int main(){ int ar[4]; for (int i = 0; i 2018. 3. 28.
[BOJ] 1912번: 연속합 1912: 연속합풀이dp[i] = max(dp[i - 1] + A[i], A[i])이다. (A[i]는 i번째 숫자이다.) 참고: i는 1부터 시작.점화식이 이렇게 나오는 이유는 문제가 "연속적"이라는데 중점을 두고 있기 때문이다. 코드sync_with_stdio(false)를 적용하면 scanf, printf보다 더 빠르다. 8ms, 12ms 12345678910111213141516171819202122232425#include using namespace std;const int mx = 100000 + 1;int n, A[mx], DP[mx]; inline int max(int a, int b) { return a > b ? a : b;}int main(){ cin.sync_with_stdio(fa.. 2018. 3. 28.
[BOJ] 2156: 포도주 시식 문제 링크설명dp[i]는 i번 것까지 먹었을 때 최댓값.현재 상태 i번째라고 했을 때 점화식 3개현재 것을 먹지 않았을 때 -> dp[i] = dp[i - 1] // i - 1 번째까지 마셨던 것을 업데이트이번 것만 먹을 때(1연속) -> dp[i] = glasses[i] + dp[i - 2] // i - 1 번은 분명히 마시지 않는다.i, i - 1번을 먹을 때(2연속) -> dp[i] = glasses[i] + glasses[i - 1] + dp[i - 3] // i - 2 번은 분명히 마시지 않는다.코드12345678910111213141516171819202122232425262728293031323334#include const int mn = 10001;inline int max(int a, .. 2018. 3. 26.
[BOJ] 1003번: 피보나치 함수 1003번: 피보나치 함수풀이그래프를 그려보면 0과 1이 호출될 때 일정한 규칙이 나오는 것을 알 수 있다. 그래서 dp[i][0]은 i번째 수에서 0의 호출 횟수이고 dp[i][1]은 i번째 수에서 1의 호출 횟수이다.또는 N이 주어질 때 dp[N]은 0의 호출 횟수이고 dp[N+1]은 1의 호출 횟수가 되는데 이 이유는 잘 모르겠다... (아시는 분은 알려주시면 정말 감사드리겠습니다!)코드1번째12345678910111213#include int main(){ int n, k; scanf("%d", &n); for (int j = 0; j 2018. 3. 25.