본문 바로가기

알고리즘17

[알고리즘] 코딩, 알고리즘 연습 사이트 최근 많은 IT회사들이 코딩테스트를 보면서 코딩 연습 사이트가 많이 생겼습니다. 다음의 사이트들에서 연습할 수 있습니다. 코딩 연습파이썬: https://www.pythonpad.co/courses/intro-1/ https://www.pythonpad.co/courses/intro-1/ 출처: https://118k.tistory.com/249#comment12300916 [개발자로 살아남기]https://www.pythonpad.co/courses/intro-1/ 출처: https://118k.tistory.com/249#comment12300916 [개발자로 살아남기] 출처: https://118k.tistory.com/249#comment12300916 [개발자로 살아남기]https://www.p.. 2019. 4. 24.
[알고리즘] Scanner와 BufferedReader의 속도 차이 Java를 이용하여 알고리즘 문제(백준, 토마토, 7576)를 풀어 보다가 스캐너(Scanner)를 이용할 때와 버퍼리더(BufferedReader)를 이용할 때의 속도 차이를 비교해 보았습니다. 동일한 로직을 데이터를 입력 받는 부분만 스캐너와 버퍼리더를 이용하여 시간을 비교해본 결과가 다음과 같습니다. 스캐너시간: 1620 ms 메모리: 335660 KB 버퍼리더시간: 552 ms 메모리: 143148 KB 스캐너를 이용하는 경우 시간은 3배, 메모리는 2배 정도 더 사용하는 것을 볼 수 있습니다. 스캐너- JDK7 소스 [바로가기] 버퍼리더- JDK7 소스 [바로가기] 소스를 확인해 보면 스캐너의 캐쉬는 1024, 버퍼리더는 8192이고, 스캐너는 데이터를 입력받을 때 정규식을 이용하여 입력 값을 .. 2019. 3. 21.
[백준][다이나믹] 2156 포도주 시식 포도주 시식은 포도주를 첫번째로 마시는 경우, 두번째로 마시는 경우, 마시지 않는 경우로 나누어서 생각하면 해결할 수 있다. 6개의 와인잔이 1000, 900, 2, 1, 800, 700 의 순서로 놓여져 있는 경우 다음과 같이 생각할 수 있다. 순서 1 2 3 4 5 6 첫 번째로 마시는 경우 1000 900 1002 1901 2700 2601 두 번째로 마시는 경우 0 1900 902 1003 2701 3400 마시지 않는 경우 0 1000 1900 1900 1901 2701 3번의 경우에 첫 번째로 마시는 경우는 이전에 마시지 않는 경우에서 자신을 더하는 것이다. -> 1000 + 2 = 1002두 번째로 마시는 경우는 이전에 첫번째로 마시는 경우에 자신을 더하는 것이다. -> 900 + 2 = 9.. 2017. 6. 19.
[백준][DP] 9251 LCS 알고리즘 LCS(Longest Common Subsequence)는 다이나믹 프로그래밍을 이용한 알고리즘 문제 풀이에 자주 이용된다. 이는 문자열 두개를 비교하여 순서대로 있는 가장 긴 문자의 수를 세는 것이다. 배열을 만들어서 문자가 일치할 때는 좌측 상단의 값에 +1을 하여 주고, 일치 하지 않으면 좌측 또는 상단의 값 중 더 큰값을 선택하여 준다. 이를 끝까지 반복하여 나오는 가장 큰 수가 LCS 값이 된다. import java.util.Scanner; public class Problem9251 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str1 = sc.nextLine();String str.. 2017. 4. 20.
[알고리즘] 알고리즘 강좌 자료와 온라인 문제 사이트 정보 올림피아드나 알고리즘 공부를 위해서 보면 좋을 교육 자료 모음 문제해결을 위한 창의적 알고리즘 KOI 교육교재(초급)문제해결을 위한 창의적 알고리즘 KOI 교육교재(중급)문제해결을 위한 창의적 알고리즘 KOI 교육교재(고급) 바로가기 -> https://www.digitalculture.or.kr/koi/StudyOnline.do# 소프트웨어 중심사회(http://www.software.kr/um/main.do)- 소프트웨어 관련 진로 정보- 각종 정부 시책 정보- 알고리즘 교육 정보 제가 주로 사용하는 사이트는 백준과 정올이다. 백준은 문제를 풀다가 질문에서 문제 풀이에 대한 힌트를 얻을 수 있다.정올은 틀리면 해당 테스트 케이스를 알려주기 때문에 도움이 된다. 백준, 정올에 동일한 문제가 있기 .. 2017. 1. 17.
[정올] [그리디] 1060 최소비용 신장트리 정올의 그리디 알고리즘 1060문제최소비용 신장트리 * 프림알고리즘을 이용하여 풀이함 최소비용의 노드를 연결하고, 현재 연결된 노드중 최소비용의 노드를 추가하면서 더 이상 방문할 노드가 없으면 종료한다. https://ko.wikipedia.org/wiki/%ED%94%84%EB%A6%BC_%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98 2016. 9. 2.
[스크랩] 알고리즘 문제를 풀이하느데 도움이 되는 페이지 정올의 문제를 주로 Java 로 풀이하여 모아놓은 사이트사이트 구성, 문제 풀이 방법을 알려주는 등 구성이 좋다. http://comganet.github.io/ 2016. 8. 24.
[정올] [백트래킹] 1695 단지번호 붙이기 이 문제는 백트래킹을 이용하면 금방처리한다. 1일때 상, 하, 좌, 우로 집의 개수를 세어서리스트에 보관하고 다 확인하면 그때 리스트의 내용을 오름차순으로 보여주면 된다. http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=968&sca=3030 2016. 7. 16.
[더블릿] Koi_Budget 더블릿의 예산 문제 http://59.23.113.171/pool/koi_budget/koi_budget.php?pname=koi_budget 프로그램 명: koi_budget제한시간: 1 초국가의 역할 중 하나는 여러 지방의 예산요청을 심사하여 국가의 예산을 분배하는 것이다. 국가예산의 총액은 미리 정해져 있어서 모든 예산요청을 배정해 주기는 어려울 수도 있다. 그래서 정해진 총액 이하에서 가능한 한 최대의 총 예산을 다음과 같은 방법으로 배정한다.(1) 모든 요청이 배정될 수 있는 경우에는 요청한 금액을 그대로 배정한다.(2) 모든 요청이 배정될 수 없는 경우에는 특정한 정수 상한액을 계산하여 그 이상인 예산요청에는 모두 상한액을 배정한다. 상한액 이하의 예산요청에 대해서는 요청한 금액을 그대로 배정.. 2016. 7. 5.
[스크랩] 나는 어떻게 알고리즘을 공부했을까? 최백준님의 나는 어떻게 알고리즘을 공부했을까? 설명자료 - 질문하고- 설명하고- 모르면 정답을 찾아보고- 정답을 이해하는 것도 내 실력 나는 어떻게 알고리즘을 공부했을까? + 신기한 방법으로 문제 풀어보기 from Baekjoon Choi 2016. 6. 30.
[더블릿] 자리 배정 알고리즘(Koi_Seat) 더블릿, 자리배정 알고리즘 문제 순서대로 이동하면서 값을 매겨서 자리를 확인한다. 2016. 6. 28.
[더블릿] 줄세우기 알고리즘(Koi_Align) 줄세우기 알고리즘 해결방법은 다음과 같다. 줄을 세울때 맨 앞과 맨뒤로만 보낼수 있기 때문에, 순서대로 읽어 가면서 정렬이 되어 있는 상태의 숫자는 옮기지 않아도 된다. 정렬이 되어 있지 않은 데이터중 1은 맨앞으로 옮기고, 나머지는 순서대로 맨뒤로 옮기면 자동으로 정렬이 되게 된다. 5, 2, 4, 1, 3의 경우 2, 3은 순서대로 정렬이 되기 때문에 이를 제외한 나머지 값을 옮기게 되므로 5-2 = 3으로 3번 움직여야 한다. 5, 2, 3, 4, 7, 1, 6의 경우 2, 3, 4는 순서대로 정렬 되기 때문에 이를 제외한 나머지 값을 옮기게 되므로 7-3 = 4로 4번 움직여야 한다. 이를 처리하는 코드는 다음과 같다. 2016. 6. 27.
[스크랩] 최대 연속 부분 구간 합 문제를 푸는 알고리즘 아래의 예제는 '프로그래밍 대회에서 배우는 알고리즘 문제 해결 전략' 이라는 책의 미리보기에서 확인할 수 있는 내용이다. 이를 통해 효율적인 알고리즘을 구성하면 수행시간이 얼마나 짧아 질 수 있는 가를 확인할 수 있다. { -7, 4, -3, 6, 3, -8, 3, 4 } 에서 최대의 합을 갖는 구간을 찾아서, 최대의 합을 출력하는 문제이다. 책의 예제를 Java 로 수정하면 아래와 같다. 알고리즘 구성에 따라 for 문을 한번만 사용하고서 답을 찾을 수도 있다. 이렇게 효율적인 알고리즘을 구성하는 것은 무엇보다 중요하다. package algorithm; public class EfficientMaxSum { static int[] array = { -7, 4, -3, 6, 3, -8, 3, 4 }; .. 2016. 6. 27.
[스크랩] 문제 해결을 위한 창의적 알고리즘 정보 올림피아드 문제 해결을 위한 공부를 위해서 여러 자료를 찾던 중 발견한 한국정보화 진흥원의 자료이다. 아래의 링크에 들어가면 초급, 중급, 고급 문제해결을 위한 기본자료들이 있다. 문제에 대한 접근을 어떻게 해야 할지 알 있을 것 같다. - 문제 해결을 위한 창의적 알고리즘 초급- 문제 해결을 위한 창의적 알고리즘 중급- 문제 해결을 위한 창의적 알고리즘 상급 https://www.digitalculture.or.kr/koi/StudyBook.do 2016. 6. 24.
[정올] 실력키우기 2255 : 섞기 수열 1. 배열의 인덱스에 적합한 값으로 -1씩 처리(배열은 0부터 시작)2. 몇번을 반복하면 기존의 값이 현재 위치로 되돌아 오는지 확인후 Set 에 저장- 중복값 자동 제거- 오름차순 정렬3. Set의 마지막 값을 배수로 키우면서 각 값들의 최소공배수를 확인 http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=1516&sca=2020 2016. 6. 15.
[JAVA] 순열(Permutation) 만들기 순열은 순서가 부여된 임의의 집합을 다른 순서로 뒤섞는 연산을 말한다. 1, 2, 3 이라는 숫자의 집합이 있을 때, 다음과 같이 뒤섞는 연산이다. 1,2,3 1,3,2 2,1,3 2,3,1 3,2,1 3,1,2 자바에서는 재귀연산을 이용해 해결할 수 있다. 기준점(pivot)이 되는 배열의 인덱스를 제공하면, 해당 인덱스의 뒤쪽에 있는 값들과 위치를 변경후 기준점을 다음의 위치로 옮겨 다시 호출하는 순서로 진행한다. 아래와 같이 배열을 이용하는 방법과 문자열을 이용하는 방법이 있다. * 순열은 문자열의 길이이 따라 n! 로 시간이 걸리게 된다. 문자열의 길이가 20, 30 개가 된다면 시간이 굉장히 오래 걸리게 된다. http://gorakgarak.tistory.com/522 http://stacko.. 2016. 6. 13.
[알고리즘] 시간 복잡도 - 프로그램을 실행시켜 완료하는데 걸리는 시간 - 알고리즘의 일반적인 시간 복잡도는 명령어의 실행 횟수를 고려한다. n for 문을 반복한 횟수, 일반 연산을 처리한 횟수 등의 합에서 상수는 제외하고 최고차항만 생각 시간 이름 bit 별 처리 시간 1 상수형 1, 1, 1, 1, 1, 1 log n 로그형 0, 1, 2, 3, 4, 5 n 선형 1, 2, 4, 8, 16, 32 n log n 선형 로그형 0, 2, 8, 24, 64, 160 n^2 평방형 1, 4, 16, 64, 256, 1024 2^n 지수형 2, 4, 16, 256 n! 계승형 1, 2, 24, 40326 - 로그형 < 선형 < 선형 로그형 < 평방형 순으로 갈수록 복잡해진다. - 빅오[O(N)]: 알고리즘 실행시간의 상한을 나타내는.. 2015. 5. 26.