본문 바로가기

반응형

코딩 -/백준 알고리즘 해설

(33)
백준 투 포인터를 이용한 부분합 구하기 (BOJ1086, 백준 부분합) 수열에서의 연속된 수들의 부분부분합이란? 특정 수열이 있다고 가정합시다. Arr 5 1 3 5 10 7 4 9 2 8 여기서 연속된 수는, 5 10 4 9 2 이렇게 연속된 수들을 골라올 수 있겠죠. 그렇다면 저 연속된 수들의 부분합은 둘 다 5 + 10 = 15, 4 + 9 + 2 = 15 가 되는것입니다. 문제입니다. 해설입니다. import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; /* 10,000 이하의 자연수로 이루어진 길이 N짜리 수열이 주어진다. 이 수열에서 연속된 수들의 부분합 중에 그 합이 S 이상이 되는 것 중, 가장 짧은 것의 길이를 구하는 프로그램을 작성하시오...
백준 삼성 SW 역량 테스트 기출 문제 문제풀이 / 게리맨더링 2 (백준 17779번) 삼성 SW 역량테스트 기출문제인 게리맨더링2를 풀어보겠습니다. 아래는 전체 소스입니다. 영역을 구분하는 부등식 부분만 유의하시면 어렵지 않은 문제입니다.(영역 나누기가 제일 어렵습니다...ㅜㅜ) 질문 있으시면 해설해드리겠습니다. #include #include //point[0] = x , point[1] = y , point[2] = d1 , point[3] = d2 void setzone(int ***arr, int point[], int N){ for (int i=0; i
백준 삼성 SW 역량 테스트 기출 문제 문제풀이 / 연구소(백준 14502번) 삼성 SW 역량테스트 기출문제인 연구소를 풀어보겠습니다. 함수를 분할하여 구현하여 단계적으로 구현합니다. 우선 여기에 필요한 함수는 3가지입니다. (개인차가 있을 수 있음) 바이러스가 퍼지는것을 구현한 spread() 함수입니다. 이는 연구소영역을 넣으면 거기에 들어있는 바이러스가 최대로 퍼지고 난 상태로 배열을 수정해줍니다.(더블 포인터 이용) 또 연구소 영역에 0이 총 몇 개 들어가 있는지를 세어주는 countzero() 함수입니다. 마지막으로 setwall() 함수가 벽이 들어갈 수 있는 모든 가능성에 대해 안전지대의 최댓값을 계산하고 max 값을 반환해주는 함수입니다. 1. 입력 분석 입력값을 살펴보면 첫 줄이 연구소 영역의 크기가 행 , 열 순서대로 입력이 됩니다. 이후 이 행 X 열 의 개수만..
백준 삼성 SW 역량 테스트 기출 문제 문제풀이 / 2048 (Easy) (백준 12100번) 삼성 SW 역량테스트 기출문제인 2048을 풀어보겠습니다. 문제를 풀기 전 단계별로 생각하는것이 필요합니다. 우선 해당 문제는 2차원 배열을 1차원화 해서 다루었습니다 . (이부분은 다른 게시글에 원리를 설명해두었습니다.) 저는 이 문제를 2048의 성질대로 구현만 잘 해놓는다면 , 이 가정하에 각 방향별로 총 5번 선택하는 총 경우의 수를 탐색하면 된다고 풀었습니다. 총 경우의 수가 4^5 가 되겠죠. 2048은 같은 방향으로 두번이상도 선택할 수 있기때문에 매번 4방향을 탐색했습니다(재귀함수 이용) 기본적으로 재귀함수 부분만 설명드리면 어려울게없는 문제기때문에 재귀함수만 설명드리고 나머지는 질문이 있을경우만 올려드리도록 하겠습니다. // direction 1 = left , 2 = right , 3 ..
백준 삼성 SW 역량 테스트 기출 문제 문제풀이 / 구슬탈출 2(백준 13460번) 삼성 SW 역량테스트 기출문제인 구슬 탈출 2를 풀어보겠습니다. 문제를 풀기 전 단계별로 생각하는것이 필요합니다. 첫째로 입력 형식입니다. 첫번째 줄의 두 숫자는 판의 크기입니다. 5 5를 입력으로 받았다면 5행 5열 3 7을 입력으로 받았다면 3행 7열 각 행과 열을 뜻합니다. 이는 입력으로 들어올 구슬판이 몇 개인지 지정되어있지 않고, 입력에서 주어지는 값으로 동적 할당하여 세팅을 해야 한다는 것을 의미합니다. 또 거기에 입력되는 종류는 '#', '.' , 'R' , 'B' , 'O'으로 문자가 입력되기 때문에 2차원 문자 배열의 동적 할당이 필요합니다. int A,B; scanf("%d %d",&A,&B); char **arr; //char 더블포인터 선언 arr = (char**)malloc(si..
백준 알고리즘 단계별 문제풀이 4 . while문 , A+B - 5 (백준 10952번) 백준 알고리즘 문제의 단계별 문제의 4번. while문 파트입니다. 종료부분 조건만 신경쓰면 어렵지 않은 문제입니다. C언어입니다. #include int main(){ int A,B; while(1){ scanf("%d %d",&A,&B); if(A==0&&B==0){ break; } printf("%d\n",A+B); } } C++입니다. #include using namespace std; int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int A, B; while (1){ cin>>A>>B; if(A==0&&B==0){ break; } cout
백준 알고리즘 단계별 문제풀이 3 . for문 , X보다 작은 수 (백준 10871번) 백준 알고리즘 문제의 단계별 문제의 3번. for문 파트입니다. 몇개를 받을지를 받고 , 그리고 몇보다 작은 수를 출력할지를 받고, 그 다음 그 갯수만큼 입력이 들어옵니다. C언어입니다. #include int main(){ int n, cri, temp; scanf("%d %d",&n,&cri); for (int i=0;itemp){ printf("%d ",temp); } } } C++입니다. #include using namespace std; int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int N, X, temp; cin>>N>>X; for (int i=0;i>temp; if(temp
백준 알고리즘 단계별 문제풀이 3 . for문 , 별 찍기 - 2 (백준 2439번) 백준 알고리즘 문제의 단계별 문제의 3번. for문 파트입니다. 별찍기 문제입니다. 총 몇번 찍을지를 입력받고 순차적으로 찍어주기때문에 이중 for문으로 풀겠습니다. C언어입니다. #include int main(){ int a; scanf("%d",&a); for (int i=1;i

반응형