1008 : [기초-출력] 출력하기08

유니코드 찾는데 너무 힘들었다.

#include <stdio.h>
int main()
{
    printf("\u250C\u252C\u2510\n\u251C\u253C\u2524\n\u2514\u2534\u2518");
    return 0;
}

1022 : [기초-입출력] 문장 1개 입력받아 그대로 출력하기

EOF를 이용하여 풀었다.

#include <stdio.h>
int main()
{
    int i=0;
    char data[2001]="";
    while(scanf("%c",&data[i])!=EOF){
        i++;
    }
    printf("%s", data);
    return 0;
}

1025 : [기초-입출력] 정수 1개 입력받아 나누어 출력하기

#include <stdio.h>
int main(){
	int a;
	scanf("%d", &a);
	printf("[%d]\n", a / 10000 * 10000);
	printf("[%d]\n", ((a % 10000) / 1000) * 1000);
	printf("[%d]\n", ((a % 1000) / 100) * 100);
	printf("[%d]\n", ((a % 100) / 10) * 10);
	printf("[%d]\n", ((a % 10) / 1) * 1);
}

1080 : [기초-종합] 언제까지 더해야 할까?

1부터 n까지의 합이 n*(n+1)/2 니까 그 공식을 역으로 사용하면 되지 않을까?
라는 생각으로 풀었다.

#include <iostream>
#include <cmath>
using namespace std;
int main(){
    cin.tie(NULL);
    ios_base::sync_with_stdio(0);
    unsigned long long int s;
    cin >> s;
    unsigned long long int n = sqrt(s*2);
    n = s<=n*(n+1)/2?n:n+1;
    cout << n;
}

1092 : [기초-종합] 함께 문제 푸는 날(설명)

#include <stdio.h>
int gcd(int a,int b){
    return b?gcd(b,a%b):a;
}
int lcm(int a, int b){
    return a*b/gcd(a,b);
}
int main()
{
    int day, a, b, c;
    scanf("%d%d%d", &a, &b, &c);
    printf("%d", lcm(a,lcm(b,c)));
}

1097 : [기초-2차원배열] 바둑알 십자 뒤집기

#include <stdio.h>
int main()
{
    int n, i, j, x, y;
    int a[20][20] = {};
    for (i = 1; i <= 19; i++) //한 줄씩 바둑판 상황 입력 받기
        for (j = 1; j <= 19; j++)
            scanf("%d", &a[i][j]);

    scanf("%d", &n); //좌표 개수 입력받기

    for (i = 1; i <= n; i++) //좌표의 개수만큼
    {
        scanf("%d %d", &x, &y);
        for (j = 1; j <= 19; j++) //가로 줄 흑<->백 바꾸기
        {
            if (a[x][j] == 0) a[x][j] = 1;
            else a[x][j] = 0;
        }
        for (j = 1; j <= 19; j++) //세로 줄 흑<->백 바꾸기
        {
            if (a[j][y] == 0) a[j][y] = 1;
            else a[j][y] = 0;
        }
    }
    for (i = 1; i <= 19; i++)
    {
        for (j = 1; j <= 19; j++)
        {
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }
}

1099 : [기초-2차원배열] 성실한 개미

처음 풀었을 때는 그래프이론도 배우지 않고 그냥 풀었다…
내가 봐도 매우 비효율적이다.

#include <stdio.h>

int main(){
    int i, j, y = 2, x = 1, n = 1;
    int a[11][11] = {};
    for (i = 1; i <= 10; i++) //한 줄씩 미로상자구조 입력 받기
        for (j = 1; j <= 10; j++)
            scanf("%d", &a[i][j]);
    i = 2, j = 1;
    while (n != 0)
    {
        while (true)
        {
            if (a[i][x + 1] == 0) {
                a[i][x + 1] = 9;
                x++, j++;
            }
            else if (a[i][x + 1] == 2) {
                a[i][x + 1] = 9;
                n = 0;
                goto result;
            }
            else if (a[i][x + 1] == 1) break;
        }
        while (true)
        {
            if (a[y + 1][j] == 0) {
                a[y + 1][j] = 9;
                y++, i++;
                break;
            }
            else if (a[y + 1][j] == 2) {
                a[y + 1][j] = 9;
                n = 0;
                goto result;
            }
            else n = 0; break;
        }
    }
    result:
    for (i = 1; i <= 10; i++)
    {
        for (j = 1; j <= 10; j++)
        {
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }
}

하지만 지금은 더 쉽고 간단하게 풀 수 있게 되었다.

#include <stdio.h>
int a[11][11] = {};
void s(int i,int j){
    if(a[i][j]==0)a[i][j]=9;
    if(a[i][j]==2){
        a[i][j]=9;
        return;
    }
    if(a[i][j+1]!=1)s(i,j+1);
    else if(a[i+1][j]!=1)s(i+1,j);
    return;
}
int main(){
    int i, j, y = 2, x = 1, n = 1;
    for (i = 1; i <= 10; i++) //한 줄씩 미로상자구조 입력 받기
        for (j = 1; j <= 10; j++)
            scanf("%d", &a[i][j]);
    s(2,2);
    for (i = 1; i <= 10; i++)
    {
        for (j = 1; j <= 10; j++)
        {
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }
}