알고리즘 47

[백준]자바_1550번 16진수

문제 16진수 수를 입력받아서 10진수로 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 16진수 수가 주어진다. 이 수의 최대 길이는 6글자이다. 16진수 수는 0~9와 A~F로 이루어져 있고, A~F는 10~15를 뜻한다. 또, 이 수는 음이 아닌 정수이다. 출력 첫째 줄에 입력으로 주어진 16진수 수를 10진수로 변환해 출력한다. 예제 입력 1 A 예제 출력 1 10 Integer.parseInt()를 사용해서 입력 받은 값을 16진수로 바꿔주기만 하면 된다. import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); String str = ..

알고리즘/백준 2021.04.22

[알고리즘]_알고리즘 문제해결 전략 3장

자료구조, 알고리즘 보다도 코딩 능력이 가장 중요하다. 좋은 코드를 짜기 위한 원칙 1. 간결한 코드 작성하기 - 전역 변수 사용 줄이기 - 자바의 foreach문 같은 흑마법 사용 2. 코드 재사용하기 - 코드 모듈화(함수나 클래스로 분리해서 재사용) 3. 표준 라이브러리 공부하기 - 큐나 스택 같은 자료구조, 정렬 등의 기초적인 알고리즘은 직접 구현하지 말고 라이브러리 이용 4. 항상 같은 형태로 프로그램 작성하기 - 자주 작성하는 알고리즘이나 코드 등에 대해서는 한 번 검증된 코드를 작성하고 이것만을 꾸준히 사용 5. 일관적이고 명료한 명명법 사용하기 - 모호하지 않은 변수명과 함수명을 사용 6. 모든 자료를 정규화해서 저장하기 - 같은 자료가 두 개 이상의 표현을 가지게 되면 버그들을 만들기 쉽다..

알고리즘 2021.03.22

[백준]자바_2750번_수 정렬하기

백준 2750 2750번: 수 정렬하기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net import java.util.Scanner; import java.util.Arrays; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int a[] = new int[n]; for(int i=0; i

알고리즘/백준 2021.03.15

[자료구조] ArrayList와 LinkedList

Java의 정석 3rd Edition ArrayList(저장순서 유지, 중복 허용)는 Object 배열을 이용해서 데이터를 순차적으로 저장 ArrayList처럼 배열을 이용한 자료구조는 데이터를 읽어오고 저장하는 데는 효율이 좋지만, 용량을 변경해야할 때는 새로운 배열을 생성한 후 기존의 배열로부터 새로운 배열로 데이터를 복사해야하기 때문에 상당히 효율이 떨어짐 LinkedList 구조가 간단하며 사용하기 쉽고 데이터를 읽어오는데 걸리는 시간(접근시간)이 가장 빠름 배열의 단점을 보완하기 위해서 고안됨 LinkedList는 단방향이기 때문에 이전 요소에 접근 어려움 => Double LinkedList 로 보완 => Double Circular LinkedList 접근성 보다 향상시킴 결론 -순차적으로 ..

알고리즘 2021.03.15

[알고리즘]_순환(Recursion)_3 반복문(Iteration)과 비교

부경대학교 권오흠 교수님의 '영리한 프로그래밍을 위한 알고리즘 강좌' Recursion vs. Iteration 모든 순환 함수는 반복문(iterator)으로 변경 가능 모든 반복문은 순환 함수로 변경 가능 순환함수는 복잡한 알고리즘을 단순하게 표현하는 것이 가능하지만, 함수 호출에 따른 오버해드가 있다. (매개변수 전달, 액티베이션 프레임 생성 등) 순환적 알고리즘 설계 암시적 매개변수(시작 지점을 암시적으로 0부터라고 하는 것)에서 명시적 매개변수(시작과 끝을 정확히 나타내는 것)로 바꾸어라 이진 탐색: Iterator(반복문 버전) public int binarySearch(int data[], int n, int target) { int begin = 0, end = n - 1; // 시작과 끝 ..

알고리즘 2021.01.29

[알고리즘]_순환(Recursion)_2 순환의 적용

부경대학교 권오흠 교수님의 '영리한 프로그래밍을 위한 알고리즘' Recursion의 적용 문자열의 길이 계산 문자열이 비어있으면 문자열의 길이는 0, 그렇지 않으면 1+(문자열의 첫 번째 문자를 제외한 문자열의 길이)이다. public static int length(String str) { if(str.equals("")) return 0; else return 1+length(str.substring(1)); // 1+(문자열의 첫 번째 문자 제외한 문자열의 길이) } 순차 탐색 data[0]에서 data[n-1] 사이에서 target을 검색한다. target이 존재하면 배열의 인덱스를 반환하고, 존재하지 않으면 -1을 반환한다. public int search(int data[], int n, in..

알고리즘 2021.01.29

[알고리즘]_순환(Recursion)_1 개념 및 예제

부경대학교 권오흠 교수님의 '영리한 프로그래밍을 위한 알고리즘' 순환(Recursion)이란? 자기 자신을 호출하는 함수 void funtion(){ ... function(); } Recursion이 무한루프에 빠지지 않으려면? Base case와 Recursive case가 필요 Base case : 적어도 하나의 recursion에 빠지지 않는 경우가 존재해야 한다. Recursive case : recursion을 반복하다보면 결국 Base case에 수렴해야 한다. public int func(int n) { if(n==0) // Base case n==0일 경우 return 0; // 0을 반환 else return n+func(n-1); // Recursive case } Factorial:..

알고리즘 2021.01.28