본문 바로가기

Algorithm159

#10994 별 찍기 - 19 # 문제 # 입력 및 출력 # 풀이 출력되는 별 사각형의 크기는 길이가 1부터 4씩 커지는 사각형임 정사각형의 변을 구해주고 재귀로 빈칸 자리를 확인해줌 크기가 k일 때부터 확인해서 1이 될 때까지 빈칸 자리를 확인해줌 아래 코드의 재귀함수의 조건문이 좀 복잡한데 첫 번째부터 네 번째까지 반복문은 i, j 값으로 빈칸을 확인하는 조건문임 n=3으로 가정하고 설명해보자 처음에 n=3 일 때 빈칸을 확인하고 그다음 n=2 일 때 빈칸을 확인해주면 됨 n=3 : (i, j) 값이 (1, 1~7), (7, 1~7), (1~7, 1), (1~7, 7) 일 때 빈칸이 됨 n=2 : (i, j) 값이 (3, 3~5), (5, 3~5), (3~5, 3), (3~5, 5) 일 때 빈칸이 됨 그 외엔 전부 * 출력 이것을.. 2022. 6. 17.
#1769 3의 배수 # 문제 # 입력 및 출력 # 풀이 재귀가 좀 어려워서 재귀문제를 좀 풀어보려고 한다 실버 1, 2 난이도의 문제들은 좀 어려운 것 같아서 쉬운 것부터 풀어보려고 간단한 문제를 풀어봤다 재귀함수 구현 자체는 쉬웠음 근데 입력이 1,000,000이하의 자연수인줄 알았는데 1,000,000 '자리' 이하의 수였다 그래서 처음에 int로 문제를 풀었을 때 틀렸음 문자열로 수정하니까 해결됨 #include #include using namespace std; void rec(int cnt, string x) { int itm = 0; if (x.size() 2022. 6. 16.
#2447 별 찍기 - 10 # 문제 # 입력 및 출력 # 풀이 안그래도 재귀문제 못푸는데 진짜 너무 어려웠다,, 저번에 한 번 시도했던 문젠데 그때도 어려워서 포기했었는데 이번에도 결국 포기하고 공부하는 마음으로 코드를 찾아봤다ㅋㅋ 일단 ***를 한 묶음으로 볼 지 *를 따로 볼 지가 제일 헷갈렸다 *와 공백을 최소 단위로 할지 N=3일때 출력을 최소 단위로 할지 어느게 맞는지 몰라서,,, 아무튼 찾아보니까 한 묶음으로 보는게 아니라 *를 최소 단위로 생각하고 풀면 된다 아래 블로그 참고했음 https://codesyun.tistory.com/75 [BOJ / 백준] 2447번 별 찍기 - 10 C++ 문제 풀이 단계별로 풀어보기 - 재귀 단계 - [3단계] 2447번 문제 문제 링크 : www.acmicpc.net/problem.. 2022. 6. 15.
#4963 섬의 개수 # 문제 # 입력 및 출력 # 풀이 전에 풀었던 문제랑 매우 유사함 그냥 dfs로 풀었음 #include using namespace std; int land[52][52]; int visit[52][52]; int dx[8] = { -1,0,1,1,1,0,-1,-1 }; int dy[8] = { -1,-1,-1,0,1,1,1,0 }; void dfs(int x,int y) { visit[x][y] = 1; for (int i = 0; i < 8; i++) { int nx = x + dx[i]; int ny = y + dy[i]; if (!visit[nx][ny] && land[nx][ny]) dfs(nx, ny); } } void clear() { for (int i = 0; i < 52; i++) {.. 2022. 6. 14.
#11286 절댓값 힙 # 문제 # 입력 및 출력 # 풀이 우선순위 큐를 써서 0이 들어올때마다 top을 가져오고 pop 해주면 될 것 같았다 sort함수랑 헷갈려서 엄청 오래걸렸다ㅋㅋ,, 일단 우선순위 큐는 3개의 인자값을 받는다 여기서 cmp는 비교 함수가 아닌 비교 클래스가 들어가야 하기 때문에 구조체를 사용해서 선언해줘야 한다 bool operator() 메소드를 오버라이딩 해서 정의해줘야 함 # 헷갈렸던 부분 1) sort() 메소드 오버라이딩 시 compare 함수 bool compare(int a, int b) { return a b; // 내림차순 } true가 리턴되면 그대로 두고, false가 리턴되면 순서를 바.. 2022. 6. 13.
#1049 기타줄 # 문제 # 입력 및 출력 # 풀이 간단한 문제다 dp문젠가 했는데 시간이 넉넉해서 그리디로 풀었음 패키지 가격 중 최소 패키지 가격과 낱개 가격 중 최소 낱개 가격을 price 배열에 저장해둔다 그리고 패키지만으로 계산, 패키지+낱개로 계산, 낱개만으로 계산 이 세가지 방법 중 최소 가격을 찾는다 #include #include using namespace std; int minv[2] = { 10000,10000 }; int price[2]; int main() { int n, m, result; cin >> n >> m; for (int i = 0; i > price[0] >> price[1]; minv[0] = min(minv[0], price[0]); minv[1].. 2022. 6. 12.