본문 바로가기

백준 문제풀이/반복문

(15)
백준 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..
백준 2438 C / 단계별로 풀어보기 - for 문 9 안녕하세요. 이번에는 9번째 2438 번 별찍기 - 1 입니다. https://www.acmicpc.net/problem/2438 2438번: 별 찍기 - 1 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 www.acmicpc.net for 문 문제의 꽃 아닐까 생각이 듭니다. 대부분 별찍기로 for 문 예제연습을 했던 것 같습니다. 일단 문제처럼 별을 출력하려면, for문을 이중으로 돌려야겠습니다. 한 줄 한 줄 넘어가는 for 문과 (별을 다 찍고 다음줄로 넘어가기 전에 개행을 해줘야 겠습니다.) 그 안에 별을 찍어주는 for 문 이렇게 말이죠. 코드를 짜보면 이렇게 되겠습니다. #include int main() { int N = 0, i = 0, j = 0; s..
백준 11022 C / 단계별로 풀어보기 - for 문 8 안녕하세요. 이번에는 8번째인 11022 번 A+B - 8 입니다. https://www.acmicpc.net/problem/11022 11022번: A+B - 8 각 테스트 케이스마다 "Case #x: A + B = C" 형식으로 출력한다. x는 테스트 케이스 번호이고 1부터 시작하며, C는 A+B이다. www.acmicpc.net 전 게시글과 달라질 게 거의 없는 게시글이네요. 단계별로 풀어보기에 이런 중복과 다름없는 문제 말고, 여러가지 케이스의 문제가 있었으면 더 좋았겠다 라는 생각이 듭니다. 그래서 for문 게시글 마지막에는 제가 문제를 하나 구해오도록 하겠습니다. #include int main() { int T = 0, A = 0, B = 0; scanf("%d", &T); for (int ..
백준 11021 C / 단계별로 풀어보기 - for 문 7 안녕하세요. 7번째인 11021 번 A+B - 7 입니다. https://www.acmicpc.net/problem/11021 11021번: A+B - 7 각 테스트 케이스마다 "Case #x: "를 출력한 다음, A+B를 출력한다. 테스트 케이스 번호는 1부터 시작한다. www.acmicpc.net 2번째인 A+B - 3 와 상당히 유사하네요. 딱히 설명할 게 없겠습니다. #include int main() { int T = 0, A = 0, B = 0; scanf("%d", &T); for (int i = 1; i
백준 2742 C / 단계별로 풀어보기 - for 문 6 안녕하세요. 이번엔 6번째 2742 번 기찍 N 입니다. https://www.acmicpc.net/problem/2742 2742번: 기찍 N 자연수 N이 주어졌을 때, N부터 1까지 한 줄에 하나씩 출력하는 프로그램을 작성하시오. www.acmicpc.net 2741번에서 뒤로 찍는걸로 바뀌었군요. i를 N으로 선언해주고, 1이 될 때 까지 감소시켜주며 돌려주면 되겠습니다. 코드를 짜면 이렇게 되겠군요. #include int main() { int N = 0, i = 0; scanf("%d", &N); for (i = N; i > 0; i--) printf("%d\n", i); return 0; } 감사합니다.