본문 바로가기

IT Study/Algorithm

[재귀함수]toBinary 문제 두 정수 N,K를 입력받아 K개의 1을 가진 N자리 이진수들을 출력하시오 입력두 정수 N, K를 입력( 0 < N 더보기
NN단 (binarySearch 문제) 문제도뿌리는 구구단표처럼 NN단표를 만들었다고 한다.NN단표는 2차원 배열의 모양으로 곱셈 1단부터 N단까지의 값들을 적어놓은 형태이다.NN단표의 배열을 A라고 했을 때, 배열의 들어가는 수 A[i][j]=i*j이다.(즉, 4행 7열에는 28, 7행 5열에는 35가 들어가 있다.)알랩이는 N단까지 나온 숫자들 중에서 K번째로 작은 수를 찾고 싶어한다.이때, 중복되는 여러 수들을 고려한다. 즉 N*N개의 모든 수들 중에서 K번째 수를 구하는 것이다. 입력첫째 줄에 배열의 크기 N이 주어진다. N은 100,000보다 작거나 같은 자연수이다. 둘째 줄에 K가 주어진다. K는 N*N보다 작거나 같고, 10,000,000,000보다 작거나 같은 자연수이다. 출력k번째 수 출력 예제 입력 예제 출력 37 6 이진탐.. 더보기
[백준 알고리즘]1011번 Fly me to the Alpha Centauri 규칙에 대한 내용 써야함(좀있다 업데이트) 123456789101112131415161718192021222324252627282930#include int main(void){ int test_case; scanf("%d",&test_case); for(int i = 0 ; i distance || i*i+i 더보기
[백준 알고리즘]2292번 벌집 1234567891011121314151617181920212223#include int main(void){ int N; scanf("%d",&N); int cnt=1; int value=1; while(1){ if(value 더보기
[백준 알고리즘]4880번 다음수 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960#include int main(void){ int arr[1000][2]={0,}; int index=0; while(1){ int num1=0,num2=0,num3=0; scanf("%d %d %d",&num1,&num2,&num3); if(num1==0 && num2==0 && num3==0) break; //AP == 1 int gap1=num2-num1; int gap2=num3-num2; if( gap1 == gap2 ){ arr[index][0]=1; arr[index++][1]=num3+gap1.. 더보기
암호화와 복호화 Main 재밋는 코드라 올렸는데 상세한 내용은 주석에 다 달아놨으니 주석을 확인하면 된다. 더보기
진수 변환 코드 Main Input method 입력값을 각 진수로 변환 ex) 2 -> 8 2 ->10 2-> 16 쉬프트 연산 대신에 Math.pow()메소드로 지수연산을 해줘도 된다. 모든 진수를 변환할때 2진수로 변환하는 작업을 거치기 때문에 몇가지 메소드만 만들면 나머지 메소드 들은 만들어 놓은 메소드를 활용해서 만들어 주면 된다. ex) 16진수를 8진수로 16 -> 2 -> 8 이런식으로 변환된다고 생각하고 코드를 짜면 간단하다. 더보기
피보나치 수열 코딩 공부를 하다보면 문제에서 피보나치가 자주 나오는데 위에처럼 보여주는건 간단하게 짜인다. 저 값을 입력한 값만큼 피보나치 수열을 받고 그 값을 활용하는 방법의 문제들도 봐 왔는데 값을 입력 받고(얼만큼의 피보나치수열을 얻을 것인지) 그 값만큼 배열을 동적할당 한 후에 값들을 배열에 저장해 나가면 된다. 더보기
버블정렬(Bubble Sort) 버블 정렬(Bubble Sort) 버블정렬은 한 루프당 1개씩 정렬 시키는 가장 널리 쓰이는 정렬이다. 예를 들어 위의 소스로 설명하자면 i가 0일때 1개의 숫자가 맨 오른쪽에 정렬되며 i이가 1일때 그오른쪽에 또하나의 수가 정렬 되고 i가 n-1일때 마지막 수가 정렬된다. 수행 시간은 로써 삽입정렬과 같다. 버블정렬이 퀵정렬이나 병합정렬보다 성능이 훨씬 안좋은데도 많이 쓰이는 이유는 구현하기가 간단하기 떄문이다. 이전 포스팅에서 보였던 병합정렬만해도 메소드를 따로 만들어서 재귀적으로 호출해야 하는데 버블정렬은 그럴 필요가 없이 간단하게 구현이 가능하다. 더보기
병합 정렬(Merge Sort) 이전 포스팅의 삽입정렬의 수행시간이 라면 병행정렬은 로써 성능이 훨씬 우수하다. 아래는 java로 병행정렬 코드화 한 것. // R[j]가 L[i]보다 작다면 A[k]에 R[j]값 저장 배열의 마지막 값을 해당 자료형의 MAX값을 주지 않고도 처리할 방법이 있다고 생각하지만 추가적으로 복잡하게 다른 알고리즘으로 범위 초과를 제한 하는 것보다 마지막값에 MAX값을 줌으로써 배열의 범위를 초과하여 발생하는 익셉션을 막아주는게 깔끔한것 같아서 책에 있는 이론을 그대로 코드화 해봤다. 보기에도 이해하기 쉬운것 같아서 만족. 더보기