반응형

c 39

[C] 백준알고리즘 #3052 나머지

정수 10개를 입력받아 이를 42로 나눈 나머지 중 서로 다른 수가 몇개인가를 구하는 문제이다. 어떤 수를 42로 나누면 나머지가 0~41까지 나올 수 있으므로 이를 저장하는 배열 a[42]를 만들어 놓은 후 나머지가 n이라면 a[n]의 수를 1 증가시키는 방법으로 0부터 41까지의 나머지를 찾을 수 있겠다. 여기서는 서로 다른 수의 갯수를 찾는 것이므로 a[n]이 1이 아닌경우에만 1을 넣어주고 모든 수를 입력 받은 후에는 for문을 이용하여 a[ ] 배열에서 값이 1인 것들만 찾아서 카운트해주면 된다. #include int main() { int n; int a[42] = { 0 }; int count = 0; for (int i = 1; i

[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] 랜덤함수를 이용하여 숫자맞추기 게임 만들기

UP & DOWN 게임처럼 숫자 맞추기 게임을 만들어 보자. 먼저 랜덤한 수를 지정하기 위해서 rand()라는 함수가 필요한데 라이브러리를 추가해주어야 사용할 수 있다. 그런데 이때 srand 함수를 호출하지 않고 rand함수를 호출 하게 되면 매번 같은 값을 얻게 된다. 따라서 정상적인 난수 값을 얻기 위해서는 반드시 srand함수를 통해 시드값을 설정해주어야 한다. 그리고 이 때 srand 함수를 통해서 시드값 설정을 위해서는 time함수가 필요한데 time 함수는 인자로 전달한 변수에 현재시각을 초로 환산한 값을 저장하는데 NULL값을 명시하면 현재시각을 반환한다. 때문에 srand(time(NULL)); 이라고 하면 현재 시각이 계속 변하므로 srand의 시드값을 항상 변하게 설정할 수 있다. 즉..

C/실습 2021.01.14

[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까지 감소하면서 *을 찍어주면 된다.

반응형