PS/Baekjoon Online Judge 586

[백준 9663] N-Queen [C]

풀이 하나의 행에는 하나의 퀸만 존재한다는 점을 이용해, 배열의 index는 행, value는 퀸의 위치로 구현했다. nQueen() 0행 부터 Brute Force 방식으로 퀸이 놓일 수 있는지 확인하고, cnt값을 조작한다. put_check() 현재 행(index)의 value(퀸의 위치)가 다음 행의 value와 일치한다면, 동일한 열에 퀸이 놓인 것 이므로, 다음 열에 퀸을 놓는 경우로 넘어간다. 현재 행(row)에서 이전 행(i)들을 뺀 값이 현재 행의 value(퀸의 위치)에서 이전 행의 value를 뺀 절대값과 동일하다면, 동일한 대각선 상에 퀸이 놓인 것 이므로, 다음 열에 퀸을 놓는 경우로 넘어간다. 소스코드 #include #include int N, board[15], cnt; in..

[백준 2292] 벌집 [C]

풀이 중앙의 방으로부터 둘러싼 방의 개수는 6, 12, 18, ... 6의 배수이다. 때문에 입력받은 방의 번호에서 6의 배수만큼 뺴서 몇 개의 방을 지나는지 계산한다. 소스코드 #include int main(){ int N, cnt; scanf("%d", &N); for (cnt = 1; N > 1; cnt++) N -= (6*cnt); printf("%d", cnt); } 출처 2292번: 벌집 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌 www.acmicpc.net

[백준 1712] 손익분기점 [C]

풀이 손익분기점을 넘기 위한 판매량은 A / (C - B) + 1의 정수값과 같다. B가 C이상일 때는, 판매량에 상관없이 절대로 손익분기점을 넘을 수 없다. 소스코드 #include int main(){ long A, B, C; scanf("%ld %ld %ld", &A, &B, &C); if (B >= C) puts("-1"); else printf("%lld", A/(C-B)+1); } 출처 1712번: 손익분기점 월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와 www.acmicpc.net

[백준 2448] 별 찍기 - 11 [C]

풀이 출력 할 삼각형의 맨 위의 좌표(빨간 원)를 (0, N-1)이라고 하자. 이진트리 처럼 좌측 하단 삼각형의 맨 위 좌표(왼쪽 초록 원)는 (0 + N/2, N-1 - N/2), 우측 하단 삼각형의 맨 위 좌표(오른쪽 초록 원)는 (0 + N/2, N-1 + N/2)이다. 분할정복을 시행할 때마다, 입력받은 크기를 2로 나누어 건네주며, 전달받은 크기가 3이 될 때 배열에 빨간원 - 좌측 초록원 - 우측 초록원 이 순서대로 가장 작은 삼각형 내부에 별을 채워 넣는 것이다. 출력형식에 약간의 장난(?)이 숨어있다. 예제 출력을 드래그 해보니, 각 행의 마지막 별을 찍고 개행이 아니라, 공백을 출력해줘야 한다. memset()를 사용해 배열을 빠르게 초기화하고, 별을 채워 넣자. 소스코드 #include..

[백준 2447] 별 찍기 - 10 [C]

풀이 좌표를 이용해 문제를 해결하기로 했다. N = 9일 때, N(9)/3의 패턴으로 둘러싸인 공백의 좌표는 (3, 3), (3, 4), (3, 5), (4, 3), (4, 4), (4, 5), (5, 3), (5, 4), (5, 5)이다. 이 좌표들은 N(9)/3으로 나누면, 1.xx인 점을 이용해 공백을 찍으면 된다. N(9)/3의 패턴 속의 공백들의 좌표는 (1, 1), (1, 4), (1, 7), (4, 1), (4, 4), (4, 7), (7, 1), (7, 4), (7, 7)이다. 이 좌표들은 "parameter로 받아오는 3으로 나누어진 N값"이 조건을 성립하지 않아 N = 1이 될 때까지 계속 재귀함수를 호출하며, 결국 조건을 성립해 공백을 찍으면 된다. 이외의 좌표들은 "parameter..

[백준 2446] 별 찍기 - 9 [C]

풀이 행의 개수는 2N - 1개, 열의 공백과 별의 개수는 2N-1개에서 N개까지 한 개씩 감소했다가, 다시 2N-1개까지 한 개씩 증가한다. 때문에, 열의 범위를 5 ~ 2N - 1로 지정했다. 별을 출력한 후에는 공백을 출력하지 않고, 개행을 해야된다는 점을 유의하자. 소스코드 #include #include int main(){ int N; scanf("%d", &N); for (int i = -N + 1; i < N; i++){ for (int j = 0; j < N + abs(i); j++) putchar(j + 1 < N-abs(i) ? 32 : '*'); putchar(10); } } 출처 2446번: 별 찍기 - 9 첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다. www.acmi..

[백준 2445] 별 찍기 - 8 [C]

풀이 2N-1개의 행에 2N개의 열으로 구성되며, 별과 공백의 개수가 증가/감소를 하기 때문에, 음수와 양수를 사용해 문제를 해결했다. 때문에 열에서는 0을 사용하지 않기 위해 -1 다음에는 1을 사용할 수 있도록 반복문의 증감식을 설정했다. 소스코드 #include #include int main(){ int N; scanf("%d", &N); for (int i = -N +1; i abs(i) ? '*' : 32); putchar(10); } } 출처 2445번: 별 찍기 - 8 첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다. www.acmicpc.net

[백준 2444] 별 찍기 - 7 [C]

풀이 공백의 개수는 N-1개부터 0개까지 한 개씩 줄었다가, 다시 N-1개까지 한 개씩 증가한다. 공백과 별의 개수는 N개부터 2N-1개까지 한 개씩 증가했다가, 다시 N개까지 감소한다. 소스코드 #include #include int main() { int N; scanf("%d", &N); for (int i = -N + 1; i < N; i++){ for (int j = 0; j < 2*N -abs(i) -1; j++) putchar(j < abs(i) ? 32 : '*'); putchar(10); } } 출처 2444번: 별 찍기 - 7 첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다. www.acmicpc.net

[백준 2443] 별 찍기 - 6 [C]

풀이 공백은 0개부터 N-1개까지 한 개씩 증가하고, 공백과 별의 전체 개수는 2N-1에서 한 개씩 줄어든다. 소스코드 #include int main() { int N; scanf("%d", &N); for (int i = 0; i < N; i++){ for (int j = 0; j < 2*N -1 -i; j++) putchar( j < i ? 32 : '*'); putchar(10); } } 출처 2443번: 별 찍기 - 6 첫째 줄에는 별 2×N-1개, 둘째 줄에는 별 2×N-3개, ..., N번째 줄에는 별 1개를 찍는 문제 별은 가운데를 기준으로 대칭이어야 한다. www.acmicpc.net