목록전체 글 (294)
Minwoo Dev.
별 그리기 정말 기본적인 코딩 반복문 연습문제인데 군대에서 뇌가 너무나 굳어버렸나보다. 컴퓨터로 이렇게 할 일이 잘 없다보니... 근무 잠 근무 잠 어쨋든 조금이라도 다시 되새기며 해보기로 다짐했다. #include void DrawStar1(int n) { for (int i = 0; i < n; i++) { for (int j = 0; j < i + 1; j++) { printf("*"); } for (int j = 0; j < n - i - 1; j++) { printf(" "); } printf("\n"); } } void DrawStar2(int n) { for (int i = 0; i < n; i++) { for (int j = 0; j < n - i; j++) { printf("*")..
흔한 별 찍기 문제. 군대 와서 뇌가 굳은 게 맞는 거 같다. 다시 차근차근 익혀야겠다는 생각이 드는 문제. #include int main(void) { int n = 0; scanf("%d", &n); for (int i = 0; i < n; i++) { for (int j = 0; j < n - i - 1; j++) { printf(" "); } for (int j = 0; j < i + 1; j++) { printf("*"); } printf("\n"); } return 0; } 반복문의 성질을 정확히 이해하면 굉장히 간단히 풀리는 문제다 반성하자.
이 문제 생각보다 굉장히 복잡한 문제다. 파이썬이었다면 이렇게 어렵지 않게 해결했을 테지만 C언어로 이 문제를 해결하려니 정수를 담을 수 있는 크기 차이가 커서 난관에 부딪혔다. 인터넷에 검색하던 도중 굉장한 풀이 방식을 찾았다. 문자열 배열을 이용하여 문제를 해결하는 것이다. 숫자를 문자열에 한 자릿수씩 넣고 그 문자열을 역순으로 뒤집는 reserve 함수를 만들어 앞에서부터 숫자가 들어가는 배열의 성질을 정확히 이용한 풀이다. 위와 같은 방식으로 해결하면 된다. 이 reserve 함수를 만들어 해결하는 소스 코드를 첨부하겠다. ASCII 코드표를 봐야하는 부분도 있기에 더 자세히 공부해봐야 할 거 같다. #include #include void reverse(char arr[]) /..
문자열을 입력받아 비교할 수 있는지를 묻는 문제이다. C언어에서 문자열을 입력받을 때에는 배열을 이용하여야 한다. #include int main(void) { // 문자열 2개 변수 생성 char a[999]; char b[999]; scanf("%s", a); scanf("%s", b); // h 전까지의 개수를 담을 변수 생성 int an = 0, bn = 0; // for문을 이용하여 h가 나오기 전까지 개수를 카운팅 for (int i = 0; a[i] != 'h'; i++) { an++; } for (int i = 0; b[i] != 'h'; i++) { bn++; } // 개수를 판단하여 go 혹은 no 출력 if (an >= bn) { printf("go\n"); } else { pri..
두 수를 입력받되, 0과 0이 입력되면 프로그램을 중단하는 방식으로 만들어야 한다. 따라서 두 변수가 모두 0이 아닌 경우에서 프로그램이 실행되어야 하고, 둘 다 0일 경우 종료하는 방식으로 설계해야한다. #include int main(void) { int n1, n2; do { scanf("%d %d", &n1, &n2); if (n1 > n2) { printf("Yes\n"); } else if ((n1
] #include int main(void) { // n 입력받기 int n=0; scanf("%d",&n); // for문 이용하여 출력 for(int i=1;i
너무 간단하다. 수도 없이 해왔던 기출이다. n에 입력받은 값을 for문으로 구구단 나열시키면 끝! 너무 간단해서 소스코드만 첨부하겠다 #include int main(void) { // n 입력받기 int n=0; scanf("%d",&n); // for문을 이용하여 1부터 9까지 쭉 for(int i=1;i
1년 전에 C언어를 이용하여 풀다가... 안풀려서 넘겼던 문제다. 일단 C언어로 작성한 코드는 #include int main(void) { // n,m 입력받기 long long n = 0, m = 0; scanf("%lld %lld",&n,&m); // 나눈 값을 rt1에, 나머지를 rt2에 double rt1 = n / m; long long rt2 = n % m; // 출력 printf("%.lf\n%lld", rt1, rt2); return 0; } 위와 같은 형식이었다. 변수를 4바이트짜리 int 로 사용했더니 오류가 났다. 문제에 제시된 범위는 10의 1000제곱이었기에 턱없이 부족한 변수였다. 그래서 8바이트짜리 long long을 사용하여 코드를 작성하였지만 이것도 10의 1000..
아 진짜 이렇게 해결하라는 뜻인 줄 몰랐다. 위 입력 설명에 보면 "N과 M은 100보다 작거나 같고, " 라는 문장이 있다. 이 문장이 의미하는 바가 행렬을 2차원 배열로 표현할 때 굳이 동적배열을 사용하지 않고 100x100 배열로 만들어 사용하라는 의미였다... 난 바보다.. 어쨋든 위와 같은 방식으로 코드를 다시 작성해보면 #include int main(void) { // n,m 변수 입력받기 int n = 0, m = 0; scanf("%d %d", &n, &m); // 100x100짜리 2차원 배열 a,b 만들기 int a[100][100]; int b[100][100]; // for 문을 이용하여 배열 a 입력받기 for (int i = 0; i < n; i++) { for (int..
행렬 크기인 n,m을 입력받아 그 크기만큼 행렬의 각 값을 입력하여 덧셈을 연선하게 하는 방식이다. #include #include int main(void) { int N, M; scanf("%d %d", &N, &M); // 입력받은 변수로 2차원 배열 '행' 할당 int **a = malloc(sizeof(int *) * N); int **b = malloc(sizeof(int *) * M); // 입력받은 변수로 2차원 배열 '열' 할당 for (int i = 0; i < N; i++) { a[i] = malloc(sizeof(int *) * M); b[i] = malloc(sizeof(int *) * M); } // a 배열 값 입력 for (int i = 0; i < N; i++) { for ..