전체 글 112

1260 DFS BFS

벡터를 사용해 인접리스트를 해볼까 했지만 나중에 비교하거나 할때 인접행렬이 편할 것 같아서 인접행렬로 풀어보겠음 밑에는 C++ 2차원배열 동적할당 하는 방법 알고리즘보다 배열때문에 힘들ㅇㅓㅆ음 이지윤이 동적할당하는거 도와줘서 어찌어찌 함 #include #include #include #include using namespace std; int **arr; int *visit; void dfs(int start, int size_arr_num, bool flag) { stack st; visit = new int[size_arr_num]; memset(visit, 0, sizeof(int)*(size_arr_num)); st.push(start); visit[start] = 1; cout > v2; ar..

DFS & BFS

*이 포스팅은 백준 알고리즘 1260을 기준으로 코드를 설명하므로 입력/출력값에 대한건 백준으로 ㄱㄱ DFS -깊이 우선 탐색 루트노드(혹은 임의의 노드)에서 시작해 다음 branch로 넘어가기 전에 해당 branch를 완벽하게 탐색하는 방법 =>넓게(wide) 탐색하기 전에 깊게(deep) 탐색하는 것이다. =>사용하는 경우: 모든 노드를 방문 하고자 하는 경우에 이 방법을 선택한다. ->깊이 우선 탐색(DFS)이 너비 우선 탐색(BFS)보다 좀 더 간단하다. ->단순 검색 속도 자체는 너비 우선 탐색(BFS)에 비해서 느리다. 그래프 탐색의 경우 어떤 노드를 방문했었는지 여부를 반드시 검사 해야 한다는 것이다. 이를 검사하지 않을 경우 무한루프에 빠질 위험이 있다. 방문한 다음 다시 backtrack..

알고리즘 2019.05.28

Jsp 기초

지시어의 형식은 으로 사용되며 지시어는 page 지시어, include 지시어, taglib 지시어로 나누어 진다. 1) page 지시어 형식 ->속성에는 무엇이 있을까 2) include 지시어 include 지시어는 특정한 JSP, HTML 파일을 해당 페이지에 삽입할 수 있도록 하는 기능을 제공하며 다음 형식으로 사용된다. 출처: https://rank01.tistory.com/32?category=487064 [JAVA FOR JAVA] //과제 내준거 해석을 하나씩 해서 login verify 만들어봐야지

카테고리 없음 2019.05.27

sw expert 1245번 문제

어떻게 풀어야할까 고민했지만 쉽게 떠오르지 않아 결국 검색.. 이분탐색을 이용해야 함 처음에 왼쪽 오른쪽을 어떻게 정해야하나 했는데 그냥 i와 i+1이 있으면 i가 왼쪽 i+1이 오른쪽 물체는 두개 중간에 있다고 생각하면 되는듯 그래서 이걸 두개씩 계속 호출하면 됨 -처음에는 float형을 썼었는데 이거보고 double 로 고침 오차범위가 줄어든다고 한다. https://www.acmicpc.net/blog/view/37 부동소숫점 오류 게시판에 올라오는 "이 코드는 왜 틀렸나요?" 류의 질문 중 부동소숫점 오류 때문에 틀리는 경우가 꽤 많이 보여서 간단하게 몇 가지 써봅니다. 0. 부동소숫점 오류 모든 실수를 8byte, 혹은 12~16byte의 변수에 모두 담을 수 있다고 생각하시는 분은 없겠죠. 변..

알고리즘 2019.05.17

완전 탐색(brute-forse)과 Greedy algorithm

-반복과 재귀 재귀 -재귀는 주어진 문제의 해를 구하기 위해 동일하면서 더 작은문제의 해를 이용하는 방법 - 함수 호출은 메모리 구조에서 스택을 사용함 ->재귀 호출은 반복적인 스택 호출을 의미하므로 메모리와 속도에서 성능 저하 발생함 *재귀가 반복보다 추가적인 메모리와 연산을 발생시킴 -완전탐색 완전 탐색의 경우 모든 경우의 수를 다 확인해야함 Ex)Tsp 문제에서 N=12이상이면 시간 복잡도가 폭발적으로 증가함 ->재귀호출을 이용해서 tsp 완전탐색 -요소의 크기가 작을 때는 빠르게 답을 찾아낼 수 있음 -Greedy algorithm 문제 제시: 거스름돈을 줄때 지폐와 동전의 수를 최소화하기 -최적해를 구하는데 사용되는 방법 -여러 경우중 하나를 선택할 때마다 그 순간에 최적이라고 생각되는 것을 선..

알고리즘 2019.05.17

백준 dynamic programming 7579 번

혹시 누군가 백준 알고리즘을 풀다 이것을 보게된다면 다른 사람의 블로그를 봐주세요.. 완전한 스터디 목적이므로 쫌 조잡한 부분이 많습니다 중간중간 계속 다른곳으로 새기 때문에 깔끔하게 풀이를 보고싶은분은 다른 블로그를 참고하길 *중간에 헤맨것 까지 다 나와있으므로 그냥 따라해서는 안됩니다.. 뻘짓 포함 우선 c++로 split하는 방법 ->사실 이게 필요 없었음..그래도 언젠가는 도움될 자료니까 나는 역시 자바가 편하긴하다..자바는 split함수 하나면 되는데.. string 배열 선언후, 배열로 입력받고 처리 split함수 직접 구현 (공백 단위로 문자 잘라서 vector에 넣음) std::istream_iterator(iss) 사용 우선 이렇게 있다고 함 그래도 c++쓰는거니까 라이브러리를 사용해 보..

백준 다이나믹 9095번

우선 c++ 로 해서 배열에 변수로 크기를 지정하는게 안된다 원래는 처음에 Testcase의 갯수를 받고 그만큼 입력을 받은후 나중에 출력해주려고 했었음 ->그래서 정답 배열을 따로 만들어 testcase의 갯수만큼 크기를 지정해 나중에 출력해주려 했으나 그건 자바에서 하는걸로..c는 되나.. =>동적할당 사용해도 되긴함 ex)cin>>test__num; int *num=new int[test_num]; 나중에 delete []num; //우선은 형식을 그냥 입력하자마자 출력하는 걸로 #include using std::cout; using std::endl; using std::cin; int main(void) { int test_num = 0; int i; int num; cin >> test_nu..

dynamic progoramming 알고리즘

-memoization 컴퓨터 프로그래밍을 실행할때 이전에 계산한 값을 메모리에 저장해서 매번 다시 계산하지 않도록 함 -동적계획 알고리즘 작은부분에서 큰부분의 해들을 모두 구하여 최종적으로 원래 주어진 문제를 해결하는 과정 여러개의 최적해중 임의의 최적해를 구하는것=> optimal - 문제를 더 작은 부분문제로 나눔 -함수의 호출을 줄이기 위함임!! 중복을 없애기 위해 저장된 결과를 배열에 저장해 다음에 사용할때는 저장된 값만 불러오는 방식으로 하는것 1.구하고자하는 문제를 여러 subproblem 으로 만든다 2.가장 작은 부분 문제(보통 0이나 1등의 종료조건)부터 푼 뒤 값을 저장한다. => 메모이제이션 3.메모이제이션된 부분 문제들의 해를 이용하여 차례로 더 큰 상위 문제의 답을 구한다. 4...

알고리즘 2019.05.10

까먹어서 다시하는 c++ 1일차

참고로 말하자면 글을 올리다가 귀찮으면 안올릴 수도 있음 그렇다고해서 공부를 안하는건 아냐 크흠 대망의 포인터 int a=10; int *b=&a; b출력하면 a의 주소값 출력 *b출력하면 a의 값 출력 =>포인터 변수 'b'에는 a의 주소값이 들어가있고 '*b'하면 해당 주소값으로 이동하게 됨(a변수의 값을 불러오게 됨) -포인터 변수는 어떤 자료형이 오든 4바이트다.. // 함수의 오버로딩 c++도 자바처럼 같은 함수명으로 여러개를 만들수 있음 *물론 c는 안됨 -매개변수를 써서 구분할것 //매개변수의 default값 함수의 매개변수에 초기화를 해주면 11행의 경우 디폴트값으로 진행 나머지는 생각하는 그대로 //namespace 같은 COUT이지만 namespace를 다르게 해줌으로써 다른 함수처럼 ..