반응형

C/백준알고리즘 38

[C] 백준알고리즘 #2577 숫자의 개수

A B C를 곱한 값이 x라고 할 때, 0부터 9까지의 숫자가 각각 몇번씩 쓰였는지 확인하는 문제이다. 먼저 입력받는 값을 x, y, z 라 하고 이 값들을 모두 곱한 값을 n에 저장한다 그리고 0부터 9까지 각 수들의 사용 횟수를 세기 위한 배열 a[10]을 생성하고 값을 모두 0으로 초기화해준다. while문을 이용하여 n을 10으로 나눈 나머지를 임시변수tmp에 저장하고 a[tmp]의 값을 증가시킨다. n에 다시 n을 10으로 나눈 몫을 저장해두면 12345 -> 1234 -> 123 -> 12 -> 1 순으로 n이 저장된다. 즉 오른쪽부터 하나씩 떨어져나간다. n의 몫이 더이상 남지않아 n / 10이 0이되면 break문을 이용해 빠져나가고 다시 for문을 사용하여 a[]배열에 저장된 값들을 하나..

[C] 백준알고리즘 #2562 최댓값

9개의 자연수를 입력받고, 이 중 최댓값과 이 최댓값이 저장된 배열의 번호를 찾는 문제이다. 먼저 9개의 값이 들어갈 배열을 생성해두고 for문을 이용하여 값을 입력받는다. 그리고 입력받은 값(a[i])이 max (0으로 초기화) 값보다 큰 경우에 max에 a[i]값을 저장한다. 이 때 이 값의 번호를 알기위해 count라는 변수를 만든 후 count변수에 i+1값을 넣는다. (for문을 i = 1; i max) { max = a[i]; count = i + 1; } } printf("%d\n%d", max, count); } \n으로 줄바꿈한 후 출력하면 완성.

[C] 백준알고리즘 #1110 더하기 사이클

조건식을 반복한 후 원래의 수로 돌아오기까지의 수를 세는 문제이다. while 문을 이용하여 반복한 후 새로운 수가 원래의 수가 된다면 break를 이용하여 빠져나오면 된다. 먼저 코드를 보자 입력받을 n이 저장되는 변수 n 반복 횟수를 저장하는 count 10의자리 수를 저장할 ten 1의자리 수를 저장할 one 기존 n값을 복사해 두는 orin 총 5개의 변수를 두었다. n을 10으로 나눈 몫과 나머지 (10의자리와 1의자리)로 나눈 후 n에 (1의자리x10) + ((10의자리+1의자리)를 10으로 나눈 나머지) 를 저장해주면 된다. while문을 반복할 때마다 count를 증가시켜 주고 복사해 두었던 orin 변수와 n값이 같아지게 되면 break문으로 빠져나오면 된다. (print문은 올바르게 작..

[C] 백준알고리즘 #2445 별 찍기 - 8 (리본)

리본모양의 별을 찍어내는 문제이다. 예제출력 1의 빈칸을 보면 모래시계 모양이니 앞에서 만들었던 모래시계 코드를 가져와서 조금 수정해보도록 한다. 위는 모래시계 모양으로 별을 찍어내는 코드이다. 여기서 printf(" "); 과 printf("*"); 의 위치를 바꾸게 된다면 별@@@@@ 별별@@@ 별별별@ 별별@@@ 별@@@@@ 처럼 나오게 될 것이다. @는 빈칸을 의미한다. 그렇다면 여기에서 리본의 오른쪽 삼각형에 해당하는 부분만 더 추가해준다면 쉽게 해결할 수 있을 것이다. 오른쪽 리본에 찍히는 별의 갯수는 왼쪽 리본과 같고, 증감도 똑같으므로 각 for문을 복사해서 빈칸을 입력하는 for문 뒤에 붙여넣기 해주면 된다. 붙여넣은 다음 빈칸의 개수를 예제 출력 1과 같이 조정해주기 위해 빈칸을 입력하..

[C] 백준알고리즘 #2444 #2446 별 찍기 - 7, 9 (다이아몬드, 모래시계)

앞선 별 찍기 5와 6을 합한 문제이다. 단순히 합쳐버리게 되면 * *** ***** ***** *** * 처럼 가운데에 중복되는 줄이 생성될 수 있으므로 조건을 조금 수정해준다. 4와 6의 정답을 가져와서 이어붙였다. 다만 위와같은 문제가 생기므로 두번째 for문(별 역순으로 찍는 구문)을 조금 수정 했다. 먼저 줄을 나타내는 i의 조건식에서 i = i * 2 + 1로 변경했는데 이로인해 조건의 범위가 2만큼 줄어들게 된다. 이는 별 갯수를 2n - 1개부터 출력하는 것이 아닌 2n - 3개부터 출력하기 위해서이다. 이어서 별 찍기 - 9 문제이다. 위의 문제의 상하를 뒤바꾼 문제이기 때문에 코드의 위치만 바꾸었다. 단순히 위치만 바꾸고 그대로 실행하면 다음처럼 오답이 나오므로 코드를 조금 수정해준다...

[C] 백준알고리즘 #2442 #2443 별 찍기 - 5 , 6 (트리, 역트리)

마치 트리모양의 별을 찍는 문제이다. 규칙을 찾아보면 빈칸은 N-1개부터 차례대로 줄어들고 *의 갯수는 1,3,5,7 ... 2n-1 개 만큼 늘어난다. 친절하게도 문제에서 N번째 줄에는 2*N-1개 라고 정의해주었으므로 이 식을 이용하여 코드를 짜면 된다. for문안의 첫번째 for문은 빈칸을 만드는 것. 그리고 두번째 for문은 *을 찍는 것이다. 위와 같은 문제이지만 역순으로 찍는 문제이다. 조건을 정하기가 꽤 까다로워 보이지만 규칙을 찾아보면 1번째 줄에서 2n -1 개 2번째 줄에서 2n - 3개 .. n번째줄에서 2n - (2n -1) 개 가 되어 1개가 출력되는 것을 알 수 있다. 따라서 초기값을 n*2-1부터 줄을 나타내는 i*2-1까지 감소하면서 *을 찍어주면 된다.

[C] 백준알고리즘 #2439 #2441 별 찍기 - 2, 4

똑같은 별 찍기 문제이지만 별이 오른쪽정렬한 상태로 출력이 된다. 이를 위해선 별이 찍히기 전까지는 빈칸을 출력해주어야 한다. 위와같은 문제는 빈칸부분과 별 부분을 나누어 생각해주면 편하다. 결국에는 n x n 만큼을 출력해주는 부분이므로 M을 입력했을 때 n 줄에 M-n만큼은 빈칸을, n만큼은 별을 출력해주면 된다. for문 안에 for문을 2개 만들어서 코드를 짜보았다. for문 안의 첫번째 for문은 빈칸을, 두번째 for문은 *을 출력하는 코드이다. 5를 입력받은 경우 첫번째 for문에서는 i = 1, j = 5,4,3,2,1 이 되는데 조건을 만족하는 j는 5,4,3,2 로 4개이므로 4칸의 빈칸이 생긴 후 두번째 for문으로 넘어가서 *이 한개 찍힌다. 한바퀴를 돌고 나면 i = 2 , j =..

[C] 백준알고리즘 #2438 #2440 별 찍기 - 1 , 3

for문 연습하는데 가장 많이 나오는 별 찍기 문제이다. 위 문제는 그 중에서도 가장 기본이 되는 순차적으로 1,2,3,...,n개의 별을 찍는 문제이므로 크게 어려움은 없을 것이다. i 와 j는 각각 줄, 칸을 의미한다고 보면 된다. 위 문제에서는 n번째 줄에서는 n개의 별만 찍어야 한다. 1번째 줄에서는 i = 1, j = 1,2,3,4,5 이므로 i

반응형