일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 꾸준히
- 구현
- 초보
- Beakjoon
- VS
- CSS
- 입문
- implement
- 백준
- 친절한 설명
- 코드엔진
- C
- 문자열
- C 언어
- Implemention
- 설명
- c언어
- greedy
- HTML
- 그리디
- 문제풀이
- 10807
- 파이썬
- 정리
- Python
- Baekjoon
- C Programming
- 알고리즘
- 10926
- 심화1
- Today
- Total
안경잡이 구루루
백준 10811 (바구니 뒤집기) [C programming] [Implemention/구현] 본문
나:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int n, m, i, j;
int p, q, r, l;
int basket[100];
int temp;
scanf("%d %d", &n, &m);
for (l = 0; l < n; l++) {
basket[l] = l + 1;
}
for (p = 0; p < m; p++) {
scanf("%d %d", &i, &j);
for(q=j,r=i; q>(i+j)/2 ;q--,r++){
temp = basket[r - 1];
basket[r-1] = basket[q-1];
basket[q - 1] = temp;
}
}
for (l = 0; l < n; l++) {
printf("%d ", basket[l]);
}
return 0;
}
완성된 코드는 위와 같다.
우선 VS에서 scanf() 오류를 막기 위해 #define _CRT_SECURE_NO_WARNINGS 를 선언
(1)
int n, m, i, j;
int p, q, r, l;
int basket[100];
int temp;
scanf("%d %d", &n, &m);
for (l = 0; l < n; l++) {
basket[l] = l + 1;
}
문제에서 변수로 사용하는 n, m, i, j 를 정수형으로 선언.
그리고 나중에 반복문에서 사용하기 위한 변수 p, q, r, l 을 정수형으로 선언.
그리고 총 바구니는 n개 와 같으니 n의 최댓값인 100을 이용해 basket[100] 배열 선언하고 바구니 순서를 바꿀 때 잠시 값을 넣어둘 변수인 temp 선언.
다음으로 l을 이용한 반복문의 경우 바구니에 들어간 수는 바구니의 인덱스 위치값+1 과 같음으로 배열의 0 부터 n-1 까지 l+1을 대입한다.
(2)
for (p = 0; p < m; p++) {
scanf("%d %d", &i, &j);
for(q=j,r=i; q>(i+j)/2 ;q--,r++){
temp = basket[r - 1];
basket[r-1] = basket[q-1];
basket[q - 1] = temp;
}
}
for (l = 0; l < n; l++) {
printf("%d ", basket[l]);
}
두 번째 이중중첩 반복문의 경우 바구니의 순서를 역순으로 만드는 방법을 구현한 것으로 코드에 대한 설명은 아래와 같다.
총 반복 횟수는 m 과 같음으로 p 를 이용한 반복문을 통해 이를 구현하고 이때 역순으로 바꿀 바구니의 순서 i, j 를 입력받는다.
그리고 q, r 을 이용한 중첩 반복문을 통해 앞서 입력받은 i, j 를 이용해 바구니의 순서를 역순으로 바꾼다.
순서대로 바구니의 순서를 역순으로 만들어야 함으로 r = i, q = j 를 반영해서 한번 반복이 끝날 때 마다 각각 증가, 감소하도록 했다.
이때 종결 조건은 ( i + j ) / 2 를 이용했는데 그이유는 절반만 진행해도 역순을 구현할 수 있어 역순으로 바꾸는 과정을 최소화 시킬 수 있고 역순으로 또 바꾸는 불상사를 막을 수 있다.
( ex. 문제에서 '예제 입력 1'에서 이를 확인해 보면 i = 1, j = 4 일 때 종결조건을 절반으로 설정하지 않는다면 i=2, j=3 의 순서를 바꾸고 i=3, j=2 일 때 또 순서를 바꾸게 되어 다시 원래 순서로 돌아오게 된다. )
마지막으로 l 을 이용한 반복으로 바구니개수 n 만큼 basket 배열에 저장된 값들을 순서대로 공백으로 구분해 출력한다.