2019-03-27

프로그래머스 강좌, 자료구조와 알고리즘 - 3

자료구조와 알고리즘 - 3 link 14강. 큐(Queues) 큐는 Stack과 달리 선입선출(FIFO; First-In First-Out) 의 순서로 제어됩니다. 리스트 속에 데이터들의 시작과 끝의 포인터가 존재합니다. 입력(enqueue)시, 리스트의 rear pointer에 추가되며 출력(dequeue)시, 리스트의 front pointer 부분을 꺼내게 됩니다. 실습 목표: 배열과 양방향 연결 리스트 구현시, 연산 복잡도 확인 배열 - 출력시, 모든 개체의 위치를 옮기는 과정에서 O(n) 가 소요 양뱡향 연결 리스트 -...

2019-03-26

개발 환경의 자동화, CI

Continuous Integration CI(Continuous Integration), 지속적 통합이란 소스관리, 빌드, 배포 등의 구조를 자동화 함으로써 소프트웨어 개발에 위험을 줄이는 방법으로 사용되고 있습니다. CI 구성의 핵심 4요소 CI Server 빌드 스크립트를 작성하고 자동화 프로세스를 구성하여 빌드. 테스트를 포함한 자동화 절차를 통해 검증하며 오류를 감지한다. 예) Jenkins, Travis 등 Source Control, Version Control 소스 코드 관리 및 팀 단위 구성의 프로젝트 진행시...

프로그래머스 알고리즘, 가장 큰 수

목표 (문제) 주어진 배열의 수를 조합하여 가장 큰 수를 만든다. 조건 numbers의 길이는 1 이상 100,000 이하입니다. numbers의 원소는 0 이상 1,000 이하입니다. 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다. 잡설 생각한 과정에서 문제가 생겨 더이상 진행하지 못하고 다른 풀이를 보았는데 comparator를 사용한걸 알게되었다. 해당 comparator에 대해 기록해봐야겠다. 코드 public static String solution(int[] numbers) { String answer =""; List<String> list = new ArrayList<>(); int length = numbers.length; ...

프로그래머스 알고리즘, 모의고사

목표 (문제) 1~5까지를 일정한 패턴으로 반복할때, 그 값들을 주어진 answers와 비교하여 일치하는 값의 갯수들을 배열로 반환하시요. 조건 answers 의 길이는 최대 10,000 입니다. 배열값은 반드시 1, 2, 3, 4, 5 중 하나입니다. 일치하는 개수가 동일할 경우, Index를 기준으로 오름차순 정렬해주세요. 일치하는 값이 모두 없을때, 두 반환합니다. 코드 public class Main { public static void main(String[] args) { // int[] answers = { 1, 2, 3, 4, 5 }; // int[] answers = { 1,3,2,4,2 }; int[] answers = { 3, 1,...

프로그래머스 알고리즘, 소수찾기2

목표 (문제) 주어진 numbers의 각각 숫자들을 조합하여 만들 수 있는 모든 소수의 수를 반환하세요. 조건 numbers는 길이가 1 ~ 7 인 문자열입니다. numbers는 0~9 까지 숫자값만으로 이루어져 있습니다. 013은 0, 1, 3 숫자로 조합하면 됩니다. 11과 011은 같은 숫자로 취급합니다. 코드 동작 오류 발생 Set<Integer> lhs = new LinkedHashSet<Integer>(); public int solution(String numbers) { makeCombination("", numbers); return getPrimeCount(new LinkedList<Integer>(lhs)); } public...

프로그래머스 알고리즘, H-index

목표 (문제) int 배열값 들을 H라고 하고 전체 배열에서 조건에 해당되는 배열값의 갯수가 n이라고 할때, n값의 최대를 구하시요. 조건 H는 n 이상 n의 값은 1 ~ 1,000 H의 값은 0 ~ 10,000 코드 import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { // int[] numbers = { 3, 0, 6, 1, 5 }; // int[] numbers = { 0, 0, 0 }; int[] numbers = { 22, 42 }; System.out.println(solution(numbers)); ...

프로그래머스 알고리즘, K번째 수

목표 (문제) 2차배열인 commands 의 값마다 [i][0]과 [i][1]번을 시작과 끝으로 array 배열에서 분리 후, 오름차순 정렬 하여 command[i][2]의 index에 해당하는 값들을 return 한다. 조건 array의 길이는 1 이상 100 이하입니다. array의 각 원소는 1 이상 100 이하입니다. commands의 길이는 1 이상 50 이하입니다. commands의 각 원소는 길이가 3입니다. 코드 import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { int[]...

Bucket Sort

버킷 정렬(bucket sort) 인터넷 자료를 보던중 컴퓨터의 세계 밖에서 발견한 O(n) 소팅 이란 게시글을 보게되었다. 보통 정렬 알고리즘은 O(nlogn) 정도가 제일 빠른것으로 표를 통해 보았는데 댓글중 버킷 정렬에 대한 댓글로 버킷정렬에 대해 얘기가 나와 궁금해졌다. 절차 코드 public void bucketSort(int[] numbers) { // int[0~9][0~n] 2차배열 생성 List<LinkedList<String>> numberGroup = new ArrayList<>(); ...

프로그래머스 알고리즘, 완주하지 못한 선수

목표 (문제) completion 배열에서 participant 배열 중 제외된 대상 값을 return 조건 participant 배열 속 선수의 수는 1명 이상 100,000명 이하입니다. completion의 길이는 participant의 길이보다 1 작습니다. 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다. 선수명이 같은 경우가 있을 수 있습니다. 코드 public String solution(String[] participant, String[] completion) { HashMap<String, Integer> start = new HashMap<String, Integer>(); for (String item : participant)...

프로그래머스 알고리즘, 베스트 앨범

목표 (문제) 같은 장르가 많은 노래 그룹을 먼저 수록합니다. 같은 장르 내에서 많이 재생된 노래를 먼저 수록합니다. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다. 조건 genres[i]는 고유번호가 i인 노래의 장르입니다. plays[i]는 고유번호가 i인 노래가 재생된 횟수입니다. genres와 plays의 길이는 같으며, 이는 1 이상 10,000 이하입니다. 장르 종류는 100개 미만입니다. 장르에 속한 곡이 하나라면, 하나의 곡만 선택합니다. 모든 장르는 재생된 횟수가 다릅니다. 잡설 domain 구성하면 복잡하지 않게 해결될거같긴 한데 다른방법도 해보고 싶어서 나름 구성해보았으나… 저 sort 메서드를 합칠 방법이 뭐가 있을까? 분명히 저렇게...