4673 셀프넘버(3/23)
1) 10001의 index를 가진 bool type 배열을 선언 및 초기화
2) 배열의 index(1~10000)숫자를 하나씩 solution 함수에 넣어서 확인
숫자가 들어오면 생성자를 가진 수를 판별
3) 생성자를 가진 숫자를 판별해서 빼줌(true로 변경)
4) 배열의 남아있는 숫자를 출력(false인 수 출력)
2309 일곱 난쟁이(3/23)
아홉명의 난쟁이 중
일곱명의 난쟁이 키를 더했을 때 100이여야 함
(아홉명의 난쟁이 들의 키) - (특정 두명의 키) = 100
1) 배열에 9개 숫자를 받는다
2) 숫자 9개의 총합을 구해준다
3) 9개 중 2개를 뽑아 총합에서 빼준다
4) 합이 100이 되면 뽑힌 숫자 2개를 제외한 7개를 오름차순으로 출력한다
2231 분해합(3/24)
1) 분해합을 구하는 함수를 만든다
2) 1부터 1,000,000까지 분해합을 구하는 반복문을 만든다
@ 1부터 입력값까지 범위면 된다(출력은 입력보다 작을 것이므로)
3) 입력 숫자와 분해합이 같으면 그 수를 출력한다
4) 같은 경우가 없으면 0을 출력한다
3085 사탕 게임(3/24)
[51][51] 2차원 배열을 만들고 각 배열을 세로로 바꾼 것과 가로로 바꾼 것을 나눈 다음 각각 세로 최대와 가로 최대를 나누어 최대값을 세준다
1) 사탕 색이 다른 인접한 두 칸을 골라서 색을 바꿔줘야 한다
2)가로로 두색을 고르는 경우, 세로로 두색을 고르는 경우로 나누어 찾는다
3) 인접한 두 색상을 바꾸고 나서 모두 같은 색으로 이루어져 있는 연속 부분을 찾는다
4) 연속 부분을 가로로 연속, 세로로 연속 두가지로 나누어 찾는다 (찾은 후 인접한 두 색상을 바꾼 것을 되돌려 놓는다)
5) 인접하는 사탕의 최대 개수를 출력한다
10448 유레카 이론(3/25)
n은 최대 44(Tn=990)이고 Tn을 모두 구한다 3부터 1000까지 있는 배열을 만든다 1개나 2개의 합으로 표현되는 수들을 지워준다 (모든 자연수가 최대 3개의 삼각수의 합으로 표현될 수 있으므로) 지워준 수를 제외한 수들을 출력한다
@ 그냥 3중 for문으로 3개를 선택해 합인 경우를 출력한다
1) 1부터 44까지의 삼각수를 만든다
2) 3중 for문으로 삼각수 3개의 합을 구해주고(같은 수 뽑아도 됨)
입력값과 같으면 true, 다르면 false를 리턴
3) true면 1, false면 0을 출력
2503 숫자 야구
1018 체스판 다시 칠하기(3/25)
MxN에서 n부터 n+7까지를 정해준다 -> 8x8보다 클 경우 전체 보드에서 체스판을 이동시킨다
8x8에서 첫번째 칸이 검은색일 경우와 흰색일 경우 나누어 다시 칠해야 하는 최소 개수를 구한다
1) 검정색이 먼저 오는 체스판과 흰색이 먼저 오는 채스판을 string을 이용해 만든다
2) 체스판에서 흰색이 먼저 오는 경우와 검정색이 오는 경우 각각 에 몇 개를 다시 칠해야 하는 지 구한다(1번에서 만든 체스판과 비교하여 같지 않으면 다시 칠해야 하는 수를 1 증가시킨다)
3) 2번에서 x, y를 매개변수로 받아 for문으로 전체 보드에서 x만큼 y만큼 이동시켜 준다(전체보드가 8x8보다 클 경우)
4) 다시 칠해야 하는 경우가 최소인 개수를 min으로 출력한다
1182 부분집합의 합
'알고리즘' 카테고리의 다른 글
| 동적 계획법(Dynamic Programming) (0) | 2022.04.05 |
|---|---|
| 너비 우선 탐색(Breadth-First Search) (0) | 2022.04.03 |
| 깊이 우선 탐색(Depth-First Search) (0) | 2022.03.30 |
| 분할 정복(Divide and Conquer) (0) | 2022.03.28 |
| 탐욕적 기법(Greedy Algorithm) (0) | 2022.03.26 |