본문 바로가기

C

(31)
백준 2577 C / 단계별로 풀어보기 - 1차원 배열 4 안녕하세요. 이번에는 1차원 배열 4번째인 2577 번, 숫자의 개수 입니다. (BOJ 2577 C) https://www.acmicpc.net/problem/2577 2577번: 숫자의 개수 첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 같거나 크고, 1,000보다 작은 자연수이다. www.acmicpc.net 세 숫자의 곱을 구하고 그 수에 0부터 9까지 몇 번 들어가있나 세는 문제로군요. 방법은 여러 가지가 있겠습니다만, 저는 10칸의 배열을 만들고, 수를 한자리씩 쪼개서 그 수의 갯수를 1개씩 늘려주는 방식으로 해보겠습니다. 예를 들어 12345 라고 하면 10보다 큰지 확인을 하고, 맞으면 10으로 나눈 것의 나머지를 구합니다. 그러면 5가 되겠죠. ..
백준 2920 C / 단계별로 풀어보기 - 1차원 배열 3 안녕하세요. 이번에는 3번째, 2920 번 음계 입니다. (BOJ 2920 C) https://www.acmicpc.net/problem/2920 2920번: 음계 문제 다장조는 c d e f g a b C, 총 8개 음으로 이루어져있다. 이 문제에서 8개 음은 다음과 같이 숫자로 바꾸어 표현한다. c는 1로, d는 2로, ..., C를 8로 바꾼다. 1부터 8까지 차례대로 연주한다면 ascending, 8부터 1까지 차례대로 연주한다면 descending, 둘 다 아니라면 mixed 이다. 연주한 순서가 주어졌을 때, 이것이 ascending인지, descending인지, 아니면 mixed인지 판별하는 프로그램을 www.acmicpc.net 1 2 3 4 5 6 7 8 이면 ascending, 8 7 ..
백준 2562 C / 단계별로 풀어보기 - 1차원 배열 2 안녕하세요. 이번에는 2번째, 2562 번 최댓값 입니다. (BOJ 2562 C) https://www.acmicpc.net/problem/2562 2562번: 최댓값 9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오. 예를 들어, 서로 다른 9개의 자연수 3, 29, 38, 12, 57, 74, 40, 85, 61 이 주어지면, 이들 중 최댓값은 85이고, 이 값은 8번째 수이다. www.acmicpc.net 드디어 배열을 써 볼만한 문제가 나왔군요. 자연수니까, 0으로 초기화를 해줘도 되겠습니다. 9칸짜리 1차원 배열을 선언해주고, 값을 저장한 다음, 최댓값을 찾아주면 되겠습니다. 코드를 짜보면 이렇게 되겠군요. #include ..
백준 10818 C / 단계별로 풀어보기 - 1차원 배열 1 안녕하세요. 이번에는 1차원 배열입니다. 변수를 하나하나 일일이 선언 안해줘도 되고 참 좋죠. 오늘은 그 첫 번째, 10818 번 최소, 최대 입니다. (BOJ 10818 C) https://www.acmicpc.net/problem/10818 10818번: 최소, 최대 첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다. www.acmicpc.net 이게 왜 1차원 배열 문제인지는 모르겠습니다... 배열을 굳이 쓸 필요가 없어보이네요. 그냥 풀겠습니다. 평소 변수를 0으로 초기화하지만, 최솟값과 최댓값은 다르게 선언해야 합니다. -1..
백준 1110 C / 단계별로 풀어보기 - while 문 3 안녕하세요. 이번에는 1110 번, 더하기 사이클 입니다. https://www.acmicpc.net/problem/1110 1110번: 더하기 사이클 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자. 26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = www.acmicpc.net 참신하네요. 왜 이런 일을 하는지는 모르겠지만, 여튼 시키니까 해봅시다...
백준 10951 C / 단계별로 풀어보기 - while 문 2 안녕하세요. 이번에는 2번째인 10951 번, A + B - 4 입니다. https://www.acmicpc.net/problem/10951 10951번: A+B - 4 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. www.acmicpc.net 입력의 끝이 주어지지 않았군요. 얼마까지 주어지는 지 모르니까 EOF 를 이용해야겠습니다. EOF 는 end of file 의 약자로, 파일의 끝 조건을 위해 쓰는 함수입니다. 쉽게 말해서 끝나면 끝났다고 알려주는 함수로 생각하시면 됩니다. 그럼 EOF 를 이용해서 while 문을 돌려야겠네요. 함수는 어떠한 값을 반환합니다. scanf() 같은 경우는 입력에 성공한 변수 갯수만큼의 값을 반환시킵니다. scanf("%d %d", &A..
백준 10952 C / 단계별로 풀어보기 - while 문 1 안녕하세요. 이번에는 while 문이네요. while문은 while( 조건식 ) { 실행할 코드 } 이런 식을 쓰면 된답니다. 그럼 10952 번, A+B - 5 를 풀어보겠습니다. https://www.acmicpc.net/problem/10952 10952번: A+B - 5 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. www.acmicpc.net while 문을 쓸 줄 알게 되면, 매우 간단한 문제입니다. A와 B가 0이 되면, while문을 멈추면 되겠네요. 코드는 이런 식으로 되겠습니다. #include int main() { int A = 0, B = 0; scanf("%d %d", &A, &B); while (A) { printf("%d\n", A + B); s..
번외) for 문 예제 / 3중 for 문 C 안녕하세요. 이번에는 번외로 제가 문제 하나를 들고 왔습니다. 다운받으셔도 되지만, 귀찮으니까 제가 캡처로 올리겠습니다. 네 이런 문제입니다. 각각 아침 점심 저녁 일당이 얼마인지 나와있고, 최대한의 효율을 뽑으려고 합니다. (최저시급도 안주는군요) 어떻게 해야 제일 많이 벌 수 있는지 한 번 코드를 짜 봅시다. 일단 경우의 수는 3P2 이므로 6가지겠군요. A아침 B점심 C저녁 / A아침 B저녁 C점심 / ... / A저녁 B점심 C아침 이런식으로 되는데, 이걸 반복문 돌리면서 계산해주는 코드를 만들어야겠네요. 배열을 배우기 전이라면 조금 귀찮으실 수도 있겠습니다. 일단 저는 배열을 써서 풀어보겠습니다. A[3] 해서 아침 점심 저녁 값 넣어주고 이런식으로 C도 넣어줍니다. 반복문을 3중으로 돌릴 건데..
백준 10871 C / 단계별로 풀어보기 - for 문 11 안녕하세요. 이번에는 단계별로 풀어보기 for 문의 마지막인 10871 번, X보다 작은 수 입니다. https://www.acmicpc.net/problem/10871 10871번: X보다 작은 수 첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000) 둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000보다 작거나 같은 정수이다. www.acmicpc.net for와 if 를 같이 써야겠네요. 뭔가 이 패턴을 보면 배열에서도 써먹을 것 같은 느낌이 납니다. 일단 for문으로 입력을 받고 그 수가 X보다 작으면 바로 출력시켜버리면 되겠네요. 코드를 짜면 이렇게 되겠군요. #include int main() { int N = 0, X = ..
백준 2439 C / 단계별로 풀어보기 - for 문 10 안녕하세요. 이번에는 10번째, 2439 번 별 찍기 - 2 입니다. https://www.acmicpc.net/problem/2439 2439번: 별 찍기 - 2 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오. www.acmicpc.net 8번째 게시글처럼 전 게시글과 다를 게 없어 생각할 필요도 없는 문제였으면 포스팅도 귀찮을 뻔 했습니다. 별 찍는 건 똑같지만, 찍는 패턴이 달라지니 생각도 달리 해야겠군요. 저번 게시글에 이중for문으로 풀었던 것 기억나시나요? 이번에도 이중for문이긴 한데, for문을 하나 더 돌려야겠습니다. 이런식이겠네요. 줄 달라지는 for 문 (개행을 넣어줌) 공백 출력하는 f..