분류 전체보기 103

재귀 알고리즘

재귀란? 어떤 사건이 자기 자신을 포함하고 다시 자기 자신을 사용하여 정의되는것을 말한다. 간단한 예로 팩토리얼을 들 수가 있다. n! = n * (n-1) 팩토리얼을 메서드로 구현하여 사용한 코드는 다음과 같다. import java.util.*; public class Main { //양의 정수 n의 팩토리얼을 반환합니다. static int factorial(int n){ if(n>0) return n * factorial(n-1); else return 1; } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("정수를 입력하세요.:"); int x = scanner.n..

자료구조 2022.07.17

큐(Queue)

큐란? 데이터를 일시적으로 쌓아놓은 자료구조이다. 데이터의 입출력순서는 선입선출(먼저 들어온 것이 먼저 나감)이다. 큐에 데이터를 넣는 작업을 인큐(enqueue), 꺼내는 작업을 디큐(dequeue)라고 한다. 즉 어떤 데이터를 인큐하면 큐의 맨 뒤에 데이터를 추가하고, 데이터를 디큐하면 큐의 맨 앞 데이터를 제거한다음 한칸씩 앞으로 당긴다. 근데 이렇게 디큐할때의 복잡도는 O(n)으로, 데이터를 하나 꺼낼때마다 이런 처리를 한다면 효율이 매우 떨어진다. 이런 문제점은 링버퍼를 사용하여 큐를 구현하면 개선할 수 있다. 프런트와 리어 값을 업데이트하며 인큐와 디큐를 수행하게 되기 때문이다. [ O(1) ] 다음은 링버퍼로 큐를 구현하는 코드이다. 구간별 설명은 주석으로 대신한다! import java.u..

자료구조 2022.07.16

스택(Stack)

스택이란? 데이터를 일시 저장하는 자료구조. 데이터의 입출력순서는 후입선출(나중에 들어온 것이 먼저 나감)이다. 스택에 데이터를 넣는 작업을 푸시(push) 스택에서 데이터를 꺼내는 작업을 팝(pop)이라고 한다. 자바에서 메서드를 호출하고 실행할때도 내부적으로 스택을 사용한다. 다음은 스택클래스 IntStack을 구현하고 이를 사용하는 프로그램이다. 각 메서드에 대한 설명은 주석에 적혀있다! import java.util.*; public class Main { static class IntStack{ private int max; //스택 용량 private int ptr; //스택 포인터 private int[] stk; //스택 본체 //실행시 예외: 스택이 비어있음 public class Emp..

자료구조 2022.07.16

배열검색 (이진검색)

이진검색 이진검색은 요소가 오름차순 또는 내림차순으로 이미 정렬된 배열에서 검색하는 알고리즘이다. 배열의 가운데 인덱스와 찾고싶은 값을 비교하면서 검색범위를 반씩 줄여가며 원하는 값을 찾아낸다. [ O(log n) ] import java.util.*; public class Main { //길이가 n인 배열 a에서 key를 이진검색합니다. static int binSearch(int[] a, int n, int key){ int pl = 0; //검색 범위의 첫 인덱스 int pr = n-1; //검색 범위의 끝 인덱스 do{ int pc = (pl + pr) / 2; //중앙 인덱스 if(a[pc]==key) //검색 성공 return pc; else if(a[pc]

자료구조 2022.07.15

배열 검색 (선형검색, 보초법)

요소가 직선 모양으로 늘어선 배열에서의 검색은 원하는 값을 찾을때까지 맨 앞부터 순서대로 요소를 검색하면 된다. 이것을 선형검색(linear search)또는 순차검색(sequential search)이라고 한다. 그리고 배열을 이용해 선형검색을 수행하는 코드는 다음과 같다. import java.util.*; public class Main { //배열의 길이가 n인 배열 a에서 key라는 값을 검색하여 존재하면 인덱스 i를, 존재하지않으면 -1을 반환한다. static int seqSearch(int[] a, int n, int key){ for (int i = 0; i < n; i++) { if(a[i]==key) return i; //검색성공 } return -1; //검색실패 } public s..

자료구조 2022.07.15

다차원 배열의 복제

자바에서 다차원 배열의 복제는 최상위 1레벨만 수행한다. 예를 들어 1차원배열의 복제를 생각해보면, int[] a = {1, 2, 3}; int[] b = a.clone(); 이 경우에 b는 a의 배열을 공유하는 것이 아니라 복제한다. (깊은 복사, Deep copy) int[][] a = {{1, 2, 3, 4}, {5, 6, 7}}; int[][] b = a.clone(); // 1차원배열만 복제되어 b[0], b[1]의 주솟값만 따로가지고, 그 아래 레벨의 배열은 복제되지않고 공유된다. 하지만 2차원 배열에서는 최상위 1레벨 즉, 1차원만 복제하고 그 아래 레벨에 대해서는 그냥 공유만 한다. (얕은 복사, Shallow copy)

기타 개발공부 2022.07.15

한 해의 경과일수 구하기 [java]

자바의 2차원 배열을 이용하여 한 해의 경과일수를 구하는 코드이다. 평년과 윤년을 2차원배열에 담아 사용했다. import java.util.*; public class Main { static int[][] mdays = { {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, //평년의 일수 {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, //윤년의 일수 }; //year년은 윤년인가 평년인가? (윤년이면 1, 평년이면 0) static int isLeap(int year){ return (year%4==0 && year%100!=0 || year%400==0) ? 1 : 0; } //y년 m월 d일의 그 해 경과 일 수를 ..

자료구조 2022.07.14

10진수 > 2진수~36진수 기수변환 [java]

원하는 10진수를 2진수~36진수중 원하는 기수로 변환해주는 코드이다. package com.company; import java.util.*; public class Main { //정수값 x를 r진수로 변환하여 배열 d에 아랫자리부터 넣어두고 자릿수를 반환. static int cardConvR(int x, int r, char[] d){ int digits = 0; //변환후의 자릿수 String dchar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; do{ d[digits++] = dchar.charAt(x%r); //x를 r로 나눈 나머지를 저장 x/=r; }while (x != 0); return digits; } public static void main(Str..

자료구조 2022.07.14

[멋쟁이사자처럼] 아이디어톤(2022.06.20~06.30)

관련된 자세한 내용은 아래 글에서 확인할 수 있다! https://star-peanuts.tistory.com/43 [멋쟁이사자처럼] 아이디어톤(2022.06.20~06.30) - (1) 백엔드1 종강과 동시에 시작한 프로젝트,, 나는 백엔드파트로 지원했고, 아키네이터처럼 음식을 골라주는 서비스인 먹키네이터 팀에 들어갔다! 이번 프로젝트에서는 파이썬과 장고를 사용했다. 내가 맡 star-peanuts.tistory.com 멋사 아이디어톤에서 제작한 사이트의 시연영상이다! 원래 배포까지 했었는데 사진 저작권문제로 지금은 내려간 상태라 로컬에서만 확인할 수 있다. ㅠㅠ 1. 먹키네이터 2. 게시판 그리고 이건 깨알자랑,, 1등했다 히히 하튼 아이디어톤 얻어가는것도 정말 많고 재밌는 일도 많았던 플젝이어서 넘..

팀 프로젝트 2022.07.06