자료구조 & 알고리즘 21

[프로그래머스] 나머지가 1이 되는 수 찾기

월간 코드 챌린지 시즌 3난이도 : Lv.1문제설명자연수 n이 매개변수로 주어집니다. n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 한상 존쟇마은 증명될 수 있습니다.제한사항3 ≤ n ≤ 1,000,000입출력 예nresult1031211입출력 예 설명입출력 예 #110을 3으로 나눈 나머지가 1이고, 3보다 작은 자연수 중에서 문제의 조건을 만족하는 수가 없으므로, 3을 return 해야 합니다.입출력 예 #212를 11로 나눈 나머지가 1이고, 11보다 작은 자연수 중에서 문제의 조건을 만족하는 수가 없으므로, 11을 return 해야 합니다.Solutionclass Solution { public int solu..

[코딩테스트] Java 코딩테스트 필수 기능 Part.2

Java로 코딩테스트를 준비한다면 필수적으로 알아야하는 기능 2탄 String 에 대해서 집중적으로 설명해보고자 한다. String = 문자열은 코딩테스트에서 가장 기본이 클래스 이기에 String 클래스에 있는 메소드를 자유자재로 사용 할 수 있어야 문제풀이에 있어 돌아가지 않고 직관적으로 해결 할 수 있다.0. 문자열 비교 equals() : 두 문자열의 내용을 비교할 때 사용함. 객체의 참조가 아닌 실제 값을 비교하므로, 문자열 비교시 권장String str1 = "abc";String str2 = new String("abc");System.out.println(str1.equals(str2));compareTo() : 두 문자열을 사전순으로 비교. 반환값이 음수면 첫 번째 문자열이 두 번째 보다..

[코딩테스트] 시간복잡도

시간복잡도 (Time Complexity)입력 크기에 따라 알고리즘이 실행되는 데 걸리는 시간을 함수로 나타낸으로, 간단하게 말하자면 알고리즘이 빠르거나 느리게 수행되는지에 대한 평가 기준이다. 시간복잡도가 중요한 이유는 코드의 효율성을 분석 할 수 있기 때문이다.코딩테스트에서 시간복잡도를 생각하지 않는다면, 제 시간안에 문제 해결을 못 할 수도 있다. 열심히 문제를 분석하고 코드를 작성하고 테스트했지만, 효율성에서 떨어지게 된다면 원점에서 다시 생각해야 될 수 있기 때문이다. 또한 시간제한이 있는 코딩테스트에서 다시 원점에서 다시 생각하고 코드를 작성한다는 것은 시간조절에 실패하고 치명적이기 때문이다. 그렇기에 시간 복잡도는 무엇인지 알아보고자 한다.빅오표기법 (Big-O Notation)시간 복잡도를..

[코딩테스트] Java 코딩테스트 필수 기능 Part.1

Java로 코딩테스트를 준비한다면 필수적으로 알아야할 필수 기능(메소드)에 대해서 설명하고자 한다. 설명에 앞서 이클립스나 인텔리제이와 같은 환경에서 개발을 하다보면 자동완성이 주는 이점으로 명확한 명칭을 기억하지 않을때가 많다. 실무에서는 IDE를 통해 개발하기에 큰 영향은 없지만 코딩테스트에서는 자동완성이 없는 경우가 많다. 특히나 기업에서 코딩테스트 플랫폼으로 많이 사용하는 프로그래머스도 자동완성 기능이 없다. 자동완성 기능이 없기 때문에 알고리즘 구현 방향성은 알아도 막상 코드 구성에서 버벅일수 있다. 이러한 상황을 미연에 방지고하고 필수적인 기능에 대해서 숙지하고자 한다.0. 헷갈리는 길이 관련 문법1. length배열의 길이를 알고자 할 때 사용 [ array.length ]2. length(..

[프로그래머스] 없는 숫자 더하기

월간 코드 챌린지 시즌3난이도 : Lv.1문제설명0부터 9까지의 숫자 중 일부가 들어잇는 정수 배열 numbers 가 매개변수로 주어집니다.numbers 에서 찾을 수 없는 0 부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solutoin 함수를 완성해 주세요.제한사항1 ≤ numbers의 길이 ≤ 90 ≤ numbers의 모든 원소 ≤ 9numbers의 모든 원소는 서로 다릅니다.입출력 예numbersresult[1,2,3,4,5,6,7,0]14[5,8,4,0,6,7,9]6입출력 예 설명입출력 예 #15, 9가 numbers 에 없으므로, 5 + 9 = 14 를 return 해야 합니다.입출력 예 #21, 2, 3이 numbers 에 없으므로, 1 + 2 + 3 = 6을 return 해..

[자료구조] List - 연결리스트

List - 연결리스트연결 리스트(Linked List)는 데이터를 저장하는 방식 중 하나로, 각각의 노드가 데이터와 함께 다음 노드에 대한 참조(주소)를 가지고 잇어 데이터를 연결하는 방식. Java에서도 각각의 노드를 참조하는 연결 리스트를 구현 할 수 잇는데, 주로 단순 연결 리스트, 이중 연결 리스트, 원형 연결 리스트의 세 종류가 많이 사용됨.1. 단순 연결 리스트 (Singly Linked List)- 구조 : 각 노드는 데이터와 다음 노드를 가리키는 참조(포인터)를 가짐. 노드는 오직 한 방향으로만 연결되어 있음- 구성 : Node 클래스는 data와 next 필드를 가지며, next는 다음 노드를 참조함.class Node { int data; Node next; Node(..

[자료구조] List - 순차리스트

List - 순차리스트 (배열,  ArrayList ...)순차 리스트(Sequentail List)는 데이트를 메모리 상에 연속적으로 젖아하는 방식의 리스트 구조로써 대표적으로 배열이 있음.배열 기반의 자료구조에서 많이 사용됨.특징1. 연속된 메모리 공간 사용순차 리스트는 배열처럼 데이터를 메모리 상의 연속된 공간에 저장함. 이로 인해 인덱스를 통한 접근 속도가 빠름.메모리 상의 특정 위치에서 바로 데이터를 찾아올 수 있기 때문에 조회 시간 복잡도는 **O(1)** 임2. 빠른 조회순차 리스트의 가장 큰 장점 중 하나는 인덱스를 사용한 데이터 조회가 매우 빠르다는 점. 이는 연속된 메모리 구조 덕분으로, 인덱스르르 통해 직접 원하는 위치에 접근할 수 있기 때문.3. 고정된 크기순차 리스트는 일반적으로..

[프로그래머스] 같은 숫자는 싫어

스택 / 큐난이도 : Lv.1문제 설명배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면,arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다.arr = [4, 4, 4, 3, 3] 이면 [4, 3]을 return 합니다.배열 arr 에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return하는 soution 함수를 완성해 주시요.제한사항배열 arr의 크기 : 1,000,000 이하의 자연수배열 arr의 원소의 크기 : 0..

[자료구조] List - ArrayList 실습 - 학생 수 입력 및 출력

ArrayListList 인터페이스의 구현체이며 순차 리스트 순차 리스트의 특징- 연속된 메모리 공간 사용- 빠른 조회- 고정된 크기- 삽입 및 삭제의 성능이 비효율적임- 메모리 활용 - 데이터의 접근 방식- 정렬된 데이터 관리- 순차 탐색- 동기화 문제ArrayList의 특징- 동적 크기 조정 : ArrayList는 크기가 고정된 배열과 달리 동적으로 크기를 조정할 수 있음. 배열이 가득 차면 내부적으로 더 큰 배열을 생성하고 기존 배열의 요소를 복사하여 확장함- 인덱스를 통한 빠른 접근 : 배열처럼 ArrayList는 인덱스 통해 요소에 직접 접근할 수 있음. 인덱스를 사용한 조회 연산(get())의 시간 복잡도는 **O(1)**- 느린 삽입 / 삭제 (중간요소) : 배열처럼 연속된 메모리 공간을 사..

[자료구조] List

ListList는 순서가 있는 데이터의 집합을 다루는 인터페이스로써, 중복을 허용하며 인덱스를 통해 요소에 접근 할 수 있음.특징- 순서 보장 : 요소가 추가된 순서가 유지되며, 인덱스를 통해 순차적으로 접근 할 수 있음- 중복 허용 : 같은 값의 요소를 여러 번 추가 할 수 있음- 인덱스 기반 접근 : 인덱스를 사용해 특정 위치의 요소를 가져오거나 수정 할 수 있음- 동적 크기 : 필요에 따라 크기가 자동으로 늘어나거나 줄어듦주요 메서드add(E e) : 요소를 리스트에 추가get(int index) : 지정된 인덱스에 있는 요소를 반환remove(int index) : 지정된 인덱스의 요소를 제거size() : 리스트의 크기를 반환contains(Object o) : 리스트에 특정 요소가 포함되어 있..