전체 글 223

[백준] 2108: 통계학

https://www.acmicpc.net/problem/2108 2108번: 통계학 첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다. www.acmicpc.net 문제 이해 문제 자체가 어렵다기 보다, 예외적인 경우가 많아서 잘 잡는 게 중요하다. 1. 평균 입력 받을 때 sum 계산했다가 N으로 나눠서 출력만 해주면 됨 for(int i = 0; i> arr[i]; sum += arr[i]; } printf("%.0f\n", (double)sum/N); 2. 중앙값 입력을 받을 때마다, lookup table에 입력된 숫자의 카운트를 올려준다. 출력할 때는 lookup..

[정올] 1495 : 대각선 지그재그

http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=767&sca=2020 JUNGOL www.jungol.co.kr 문제 분석 차례대로 채워나가는 칸의 방향과 좌표의 움직임을 고려해보면 다음과 같다 범위를 넘어갔을 때 방향전환과 더불어 새로운 위치를 설정해주면 된다. 작성 코드 #include #define UP 1 #define DOWN 0 int N; int arr[100][100]; int dx[2] = { -1, 1 }; int dy[2] = { 1, -1 }; int main(void) { int i = 1; int x = 1, y = -1; int d = DOWN; scanf("%d", &N); for (; i = N) { if (y >=..

[백준] 10799번: 쇠막대기

https://www.acmicpc.net/problem/10799 10799번: 쇠막대기 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저 www.acmicpc.net 문제 이해 문자열 파싱하는 문제이다. (와 )가 붙어있으면 레이저이고 아니면 막대기의 시작이거나 끝이다. 1. ( 과 )가 붙어있는 경우 -> 레이저 2. ( 다음에 )가 아니면 -> 막대의 시작 3. ) 인데 전이 (이 아니면 -> 막대의 끝 레이저일 때는 막대만큼 덩어리 추가, 막대의 시작이면 막대 개수 추가 막대의 끝이면 막대 개수 감소 이렇게 처리해서 막대 덩어리들의 수를 찾으면 된다. 작성 코드 #..

[백준] 2567번: 색종이 - 2

https://www.acmicpc.net/problem/2567 2567번: 색종이 - 2 첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변 www.acmicpc.net 문제 이해 좌표 계산을 통해 둘레를 하나하나 구해가지고 더하는 것은 너무 어렵다. 결국 배열에 색종이 부분을 칠하고 둘레를 계산하는 것이 최선의 방법인데, 칠한 테두리의 개수를 세서 하려고 하니까 또 엄청 복잡해진다. (모서리를 처리하기 너무 어려움) 결국 인터넷 검색을 통해 찾은 방법은, 색종이들을 다 1로 칠하고 나서, 만약 상하좌우가 0이면 모서리라는 것이다. 즉, 1인데, 상하좌우중에 0이 있..

[정올] 2008 : 할부

http://cham.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=1281&sca=9060 JUNGOL www.jungol.co.kr 간단 문제 분석 M1: B/(N-1) B/(N-1) B/(N-1) ...... B/(N-1)+1 B/(N-1)+1 MN: B/(N-1)+1 주어진 게 총 할부 기간 N 앞으로(N-1달간) 내야하는 다이아 수 B 그림 기본적으로 2일부터 N일까지 B/(N-1) 만큼 기본적으로 내는데 마지막날(MN) 부터 전 몇 달은 +1 해서 내야한다. 근데 +1해서 내는 개월 수는 B%(N-1)로 알 수 있다. 최대, 최솟값이 갈리는 경우는 다음과 같다. B/(N-1) == 0 이면, 금액이 이렇게 나뉘는데 M1: ? B/(N-1) ... B/(N..

[정올] 2712 : 두 수의 최소합

http://jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=1975&sca=99&page=17 JUNGOL www.jungol.co.kr 사용 언어: C #include #define SWAP(x, y) {int t = (x); (x) = (y); (y) = t;} int N; int arr[15]; int main(void) { int num1 = 0, num2 = 0; scanf("%d", &N); // 입력받음 for (int i = 0; i < N; i++) { scanf("%d", &arr[i]); } // 정렬 (내림차순) for (int i = 0; i < N - 1; i++) { for (int j = i + 1; j < N; j++) { if (ar..

[백준] 5622번: 다이얼

https://www.acmicpc.net/problem/5622 5622번: 다이얼 첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다. www.acmicpc.net 각 알파벳에 해당하는 다이얼 넘버를 배열로 저장하고, 바로 꺼내 쓰는 방식을 사용했다. 마지막 출력값이, 다이얼 넘버 + 각 넘버를 누르는 수 (즉, 문자열의 길이) 여야 한다는 점이 좀 헷갈렸다 #include #include #include using namespace std; int alp[26] = { 2, 2, 2, 3, 3, 3, 4, 4, 4,\ 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, \ 8, 8, 8, 9, 9, 9, 9 }; int main(void)..

[백준] 2751번: 수 정렬하기 2

https://www.acmicpc.net/problem/2751 2751번: 수 정렬하기 2 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net nlogn의 시간복잡도를 가지는 알고리즘으로 정렬해야 해서 열심히 merge sort를 구현했는데, 자꾸 시간 초과가 뜬다. ios_base::sync_with_stdio(false); cin.tie(0); 이거 두 개 사용해도 시간초과고, printf, scanf를 사용해도 시간초과다. 결국 merge sort에 문제가 있는 것 같은데, 검색해보니까 나랑 거의 비슷하게 merge so..

[백준] 1018번: 체스판 다시 칠하기

https://www.acmicpc.net/problem/1018 1018번: 체스판 다시 칠하기 첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다. www.acmicpc.net 문제 분석: 주어지는 n*m 의 배열이 있다. 이 배열은 각 칸이 B혹은 W로 칠해져있다. 이 배열에서 나올 수 있는 8*8 배열 중에, 가장 적은 칸을 칠해서 (W이면 B로, B이면 W로) 바둑판 모양을 만든다. 바둑판을 만들 수 있는 가장 작은 색칠 횟수를 구해라. 구현한 코드: // 백준 #1018 #include char arr[50][50]; int n, m; int min_cnt..