본문 바로가기

문제풀이

(25)
[C언어] 백준 1011번 Fly me to the Alpha Centauri 문제 자체를 잘못 이해해 질문 게시판에 있는 팁 정리 글을 보고 겨우겨우 풀었다. 문제 접근 처음 이동 거리는 1, 이후 012 중 선택, 가장 멀리 2를 가기로 했다면 다음 가능한 이동 거리는 123이 된다. 맨 처음 이동 거리가 1로 시작했듯, 마지막 턴의 이동 거리도 1로 끝나야 한다. 따라서 최소한의 이동횟수를 통해 움직이려면 점차적으로 증가해야 할 뿐만 아니라, 점차적으로 감소시켜야 한다. 1 2 3 4 5 ... n ... 5 4 3 2 1 같은 패턴으로 이동한다. sqrt를 사용한 풀이법이 있었으나.. 나는 일단 문제부터 풀고 공부를 해야 할 것 같아 반복문을 통해 풀었다. 패턴을 파악하기 위해 열심히 끄적여봤다. (0 ≤ x < y < 2^31) 2^31-1은 2147483647로, 32비..
[C언어] 백준 10757 큰수 A+B #include #include int main(void) { int i, j, lenA, lenB; char a[10001] = { '\0' }; char b[10001] = { '\0' }; scanf("%s %s", a, b); lenA = strlen(a), lenB = strlen(b); for (i = lenA -1, j = lenB -1; i > -1 || j > -1; i--, j--) { if (i >= j) { if (j > -1) a[i] += b[j] - '0'; if (a[i] - '0' > 9) { if (i > 0) a[i - 1]++; else printf("%d", 1); a[i] = (a[i] - '0') % 10 + '0'; } } else { if (i > -1) b[..
[C언어] 백준 2275 부녀회장이 될테야 평소 반상회에 참석하는 것을 좋아하는 주희는 이번 기회에 부녀회장이 되고 싶어 각 층의 사람들을 불러 모아 반상회를 주최하려고 한다. 이 아파트에 거주를 하려면 조건이 있는데, “a층의 b호에 살려면 자신의 아래(a-1)층의 1호부터 b호까지 사람들의 수의 합만큼 사람들을 데려와 살아야 한다” 는 계약 조항을 꼭 지키고 들어와야 한다. 아파트에 비어있는 집은 없고 모든 거주민들이 이 계약 조건을 지키고 왔다고 가정했을 때, 주어지는 양의 정수 k와 n에 대해 k층에 n호에는 몇 명이 살고 있는지 출력하라. 단, 아파트에는 0층부터 있고 각층에는 1호부터 있으며, 0층의 i호에는 i명이 산다. 도저히 배열+for문 조합을 쓰지 않고 푸는 방법을 모르겠어서 그냥 풀기로 함. 테스트케이스를 입력받아 그 수만큼..
[C언어] 백준 1193 분수찾기 패턴을 어떻게 잡느냐에 따라 엄청 긴 코드가 나올 수도 있고 간단한 코드가 나올 수도 있음 내가 발견한 것 중 가장 간단한 접근법으로는, n번째 대각선에 오는 분수의 개수가 n개라는 것에서 시작한다. 1/1 1/2 2/1 3/1 2/2 1/3 1/4 2/3 3/2 4/1 5/1 4/2 3/3 2/4 1/5 두번째 패턴으로는, n번째가 짝수일때는 1/n에서 시작해 n/1에서 끝나고, 홀수일때는 n/1에서 시작해 1/n에서 끝난다는 것이다. 따라서 N번째 분수가 몇번째 대각선에 오는지를 아는 게 문제풀이의 첫 단계가 된다. #include int main(void) { int num, n = 0, totN = 0; scanf("%d", &num); while (totN < num) { n++; totN +=..
[C언어] 백준 10250 ACM호텔 #include int main(void) { int height, width, n, tN; // floor, roomNo, the order of the customer scanf("%d", &tN); while (tN--) { scanf("%d %d %d", &height, &width, &n); width = n / height; if (n % height) { width++; height = n % height; } printf("%d%02d\n", height, width); } return 0; } #include int main(void) { int height, width, n, tN; // floor, roomNo, the order of the customer scanf("%d", &t..
[C언어] 백준 2292 벌집 minNum n maxNum 1 0 1 2 + 6 * 0 - 1 2 1 7 2 + 6 * 1 - 1 = 1 + 6 8 2 19 8 + 6 * 2 - 1 = 1 + 6 + 12 20 3 37 20 + 6 * 3 - 1 = 1 + 6 + 12 + 18 38 4 61 38 + 6 * 4 - 1 = 1 + 6 + 12 + 18 + 24 62 5 91 62 + 6 * 5 - 1 = 1 + 6 + 12 + 18 + 24 + 30 92 6 127 92 + 6 * 6 - 1 = 1 + 6 + 12 + 18 + 24 + 30 + 36 minNum = minNum + 6 * n 하나의 육각형을 만드는 첫번째 숫자가 일정한 패턴을 가지고 증가하고 있는 걸 파악할 수 있다. 또한 이 n번째는 시작점과 끝을 포함하여 가장 빨리..
[C언어] 백준 1712 손익분기점 #include int main(void) { int fixedCost, variableCost, price, q = -1; scanf("%d %d %d", &fixedCost, &variableCost, &price); if(variableCost price * q 일때마다 q를 증가시켜 문제를 풀었으나 시간초과로 실패함 두번째 조건문이 잘못되었음 if (variableCost > price) q = -1; else q = fixedCost / (p..
[C언어] 백준 1316 그룹 단어 체커 #include int main(void) { int n, cnt = 0, i, grouped; int lastIndex[26] = { 0 }; char c; scanf("%d%*c", &n); while(n--) { i = 1, grouped = 1; // while loop: until '\n' entered, get characters one by one for one word while ((c = getchar()) != '\n') { if (grouped) { // if the value at an index corresponding to alphabetical order is 2 (or more) less than i if (lastIndex[c - 'a'] && i - lastIndex[c ..