본문 바로가기

C C++/C C++ 백준69

[C/C++] 백준 10026번 적록색약 문제 풀이 이 문제는 전형적인 BFS와 DFS 문제이며 DFS로 문제를 풀도록 하겠다. 예시의 부분은 아래와 같다. R R R B B G G B B B B B B R R B B R R R R R R R R 예를 들면 첫 번째 [1,1], [1,2], [1,3] 영역을 칠하게 된다. 어떠한 식으로 칠해야할까? 1) for문으로 모든 영역을 훑도록 한다. (visit 체크된 좌표는 이미 칠했으므로 넘어간다.) 2) [1,1]이 입력되면 해당 좌표를 방문하였으므로 visit 체크한다. 3) 상하좌우 탐색한다. 4) 범위 밖으로 나가면 넘어간다. 5) 색이 다르는 등의 조건이 맞지 않는 경우 넘어간다. 6) 연결된 부위에서 조건이 맞는 내용은 또 칠한다. (DFS 함수에 탐색된 좌표를 다시 넣는다.) 위와 같다.. 2022. 10. 26.
[C/C++] 백준 10974번 모든 순열 문제 풀이 이 문제는 '순열'을 이용한 것임. 수를 나열하는 데, 중복해서 사용할 수는 없고 순서가 다르면 다르게 보는 것임. 예를 들어 {1,2}라는 숫자 집합이 있다고 할 때, 2개씩 나열하는 순열은 1,2 / 2,1와 같이 같은 숫자를 사용할 수 있는 것임. 코드로 설명하면 아래와 같음. void D(int cnt) { if (cnt==N+1) // N+1: 4 { for (int i=1; i 2022. 10. 9.
[C/C++] 백준 15651번 N과 M (3) 문제 풀이 이 문제는 '중복 순열'을 이용한 것임. 수를 나열하는 데 같은 수를 사용할 수 있음. 예를 들어 {1,2}라는 숫자 집합이 있다고 할 때, 2개씩 나열하는 중복 순열은 1,1 / 1,2 / 2,2 와 같이 같은 숫자를 사용할 수 있는 것임. 코드에 대해 설명하도록 하겠음. void D(int cnt) { if (cnt==M+1) { for (int i=1; i 2022. 10. 9.
[C/C++] 로또의 최고 순위와 최저 순위 (Lv1) 문제 풀이 이번 문제는 아래 3가지 포인트가 있습니다. 1) 배열끼리의 비교하여 동일한 값이 몇 개인지 확인 => for문을 2번 써서 O(N^2)의 시간 복잡도를 가졌지만, 필요한 경우 각각 정렬하여 인덱스별로 동일한지 확인하는 방식이 빠를 것 같다. 2) 배열에 0이 몇개인지 확인 3) 동일한 값 + 0의 개수로 최고 순위 구하기, 동일한 값으로 최저 순위 구하기 => 순위를 구할 때 순위를 미리 배열(int rank[7])에 저장 해 둬서 인덱스만 참조하면 등수를 불러올 수 있도록 하였다. 소스코드 #include #include #include // lottos_len은 배열 lottos의 길이입니다. // win_nums_len은 배열 win_nums의 길이입니다. int* solution(in.. 2022. 7. 10.