본문 바로가기

자바14

LeetCode(릿코드) - Merge Two Sorted Lists 두 개의 정렬된 LinkedList를 하나의 정렬된 List로 병합하는 문제입니다. 예시는 아래와 같습니다. Point 1. 문제에서 주어진 ListNode 클래스를 사용하여 풀이해야 한다. 2. LinkedList의 특징과 Java 주소값 참조 개념에 대해 이해하고 있어야 한다. 처음엔 쉬운 문제라고 생각했는데 거의 1시간이 걸렸다. 자료구조를 제대로 이해하고 있다고 착각하고 있었다는 것을 깨닫게 해준 문제.. /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int.. 2021. 12. 6.
LeetCode(릿코드) - Valid Parentheses 3가지 형태의 괄호로 이루어진 문자열이 input으로 주어질 때, 해당 괄호가 유효한지 검증하는 문제입니다. Point 1. Open bracket이 주어진 이후에는 반드시 같은 형태의 닫는 괄호가 나와야 한다. 2. Open bracket이 모두 닫히지 않은 형태도 고려해줘야 한다. class Solution { public boolean isValid(String s) { boolean answer = true; Stack stack = new Stack(); int idx = 0; while(answer && idx 2021. 12. 5.
LeetCode(릿코드) - Longest Common Prefix 문자열 배열을 input으로 주어질 때, 배열의 모든 원소에 적용될 수 있는 '공통 접두사'를 찾는 문제입니다. 복잡한 아이디어가 필요한 문제는 아닌 것 같습니다. Point 1. 접두사란, 접사(接辭)의 하나로 어떤 낱말 앞에 붙어서 의미를 첨가하여 한 다른 낱말을 이루는 말. 정의에 따라 반드시 0번 인덱스부터 시작해야한다. class Solution { public String longestCommonPrefix(String[] strs) { StringBuilder sb = new StringBuilder(); int minLeng = 201; for(String str : strs) { minLeng = Math.min(minLeng, str.length()); } for(int i=0 ; i 2021. 12. 5.
LeetCode(릿코드) - Two Sum 정수 배열 nums와 정수 target이 input으로 주어질 때, nums안의 2개 element 합이 target과 같은 element의 index를 구하는 문제입니다. 예시는 다음과 같습니다. Point 1. 문제의 답은 오직 한 가지 쌍이며, 같은 element를 두 번 사용하지 않는다. 나는 단순하게 풀이를 했다. Flow 1) 주어진 배열 nums를 정렬한 sortArr에서 합이 target이 되는 element를 탐색 Flow 2) 해당 element의 index를 탐색 class Solution { public static int INF = 987654321; public int[] twoSum(int[] nums, int target) { int[] answer = new int[]{IN.. 2021. 12. 4.
LeetCode(릿코드) - Roman to Integer 로마 숫자가 Input으로 들어오면 이를 10진수로 변환하는 프로그램을 작성하는 문제입니다. 예시는 다음과 같습니다. Point 1. Subtraction은 IV, XC, CD 등의 형태만을 가진다.(IIV, CCM 같은 형태는 없음) 2. 로마 숫자는 내림차순으로 작성되므로 Input 문자열의 가장 뒷부분부터 체크하면 수월하다. import java.util.*; class Solution { public int romanToInt(String s) { Map roman = new HashMap(); roman.put('I', 1); roman.put('V', 5); roman.put('X', 10); roman.put('L', 50); roman.put('C', 100); roman.put('D', .. 2021. 12. 3.
Map 정렬하기 자료구조 중 Map 객체의 정렬에 대해 정리하려고 합니다. Map 객체의 정렬은 key 기준 정렬과 value 기준 정렬이 있습니다. Key 기준 정렬 key 기준 정렬은 어려울 것이 없습니다. 기본적으로 key값을 기준으로 정렬해주는 TreeMap 이 있기 때문입니다. Map map = new TreeMap(); map.put('B', 2); map.put('A', 1); map.put('G', 4); map.put('E', 3); System.out.print(map); // 출력 {A=1, B=2, E=3, G=4} Value 기준 정렬 value 기준 정렬은 여러 가지 방법이 있습니다. 그중 가장 간단한 방법은 Map의 key값들을 list에 저장한 후 Comparator를 이용해 Value 기준.. 2021. 9. 30.
2021 카카오 인턴십 - 거리두기 확인하기 문제 해석 해당 문제는 탐색 문제입니다. 문제에서 주어진 제한사항에 따르면 대기실은 항상 5개라고 친절히 알려줍니다. BFS, DFS 둘 다 풀이가 가능하지만 BFS가 조금 더 정답에 가까운 알고리즘인 것 같습니다. "벽"이라는 개념만 체크하면 쉽게 풀 수 있습니다. 풀이 최초에는 "벽" 개념을 망각하고 풀이를 시작해서 코드가 다소 복잡해졌습니다.. 풀이는 단순합니다. 각 대기실의 모든 응시자 P마다 거리가 2인 지점들을 모두 탐색하고 맨해튼 거리가 2 이상인 응시자가 있다면 바로 0을 반환해줍니다. 코드 import java.util.*; class Solution { public static int[] dr = {-1, 0, 1, 0}; public static int[] dc = {0, 1, 0, .. 2021. 8. 27.
2018 카카오 블라인드 채용 - [1차] 셔틀버스 문제 해석 해당 문제는 구현 문제입니다. 문제에서 주어진 힌트와 제한사항을 바탕으로 아래와 같이 발생 가능한 상황을 시간 순서대로 분류했습니다. 버스 운행시간 이전(~09:00) 탑승대기 크루의 수 >= 최대 운행 가능한 사람 수 버스 운행 시작 이후(09:00~) 버스가 모두 돌기 전에 탑승 대기 크루의 수 >= 최대 운행 가능한 사람 수 버스 운행이 종료된 시점에 탑승 대기 크루의 수 == 최대 운행 가능한 사람 수 버스 운행이 종료된 시점에 탑승대기 크루의 수 < 최대 운행 가능한 사람 수 풀이 최초에 문제에 대한 명확한 정의를 하지 않고 코드부터 작성했을 때 2시간이 걸려도 풀지 못했는데 정의를 완벽히 마치고 풀이에 들어 갔을 때는 30분 만에 해결이 됐습니다. 구현 문제에서는 문제에 대한 "명확.. 2021. 8. 16.
Java 언어의 특징 자바는 대표적인 객체지향 프로그래밍 언어이다 객체지향 프로그래밍(Object Oriented Programming)의 대표적인 특징 4가지는 아래와 같다 캡슐화 - 하나의 클래스 안에 데이터와 기능을 담아 정의하고, 중요한 데이터와 기능 등은 숨기고 외부에서 사용하는데 필요한 것들만 공개하는 것 상속 - 부모 클래스를 상속받은 자식 클래스는 부모 클래스에 선언된 메서드를 사용할 수 있다. 다형성 - 메서드의 변형이라고 이야기할 수 있는 특성으로 오버로딩과 오버라이딩이 있다. 추상화 - 현실의 객체에서 특징을 추출하는 과정 ex) 자동차 ==> 이름, 색깔 등의 정적 특징 / 움직임, 멈춤 등의 기능 Class 현실의 객체(Object)들을 분석하여 공통적인 특징들을 추상화해서 표현한 것! Class 생성.. 2021. 2. 5.
백준 3954 Brainf**k 인터프리터 문제 해석 출력이 Terminates이거나 Loops x y 이기 때문에 입력의 마지막인 프로그램 입력 부분은 무시해도 무관 [ ]이 do-while 반복문과 같이 동작함 50,000,000 5천만 번 이상 실행 시 종료되지 않는다면 무한루프 판정 구현이 어려운 문제는 아니었지만 골드 1 레벨인 이유는 "무한루프" 일 때 해당 구간을 정확히 구하는 마지막 처리가 까다로운 이유인 것 같다. ( 나도 이 부분에서 매우 오랜 시간 고민했다 ) 풀이 기본적으로 탐색 시간을 최소화시키기 위해 한 쌍인 각 괄호의 위치를 pos배열에 저장하였다. 마지막 무한루프 위치 처리에 대해서 다양한 생각을 해보았지만 실패했다. 무한루프 판정 시 실행 중인 루프를 포함한 가장 바깥의 루프 ==> + [ - [ ] + + ] 같은.. 2021. 2. 3.
Overloading & Overriding OOP의 특징 중 다형성(Polymorphism)의 가장 중요한 개념이 오버로딩과 오버라이딩이다. Overloading 같은 이름의 메서드가 파라미터 값이 다를 때 중복정의 되어졌다고 한다. 오버로딩은 반드시 상속관계에서만 발생하지는 않고, 조건은 아래와 같다. 파라미터의 Type이 다르거나 파라미터의 개수가 다르거나 파라미터의 순서가 다르거나 class OverloadingTest { // 파라미터의 타입이 다를때 public void overloading(int i) { } public void overloading(String s) { } // 파라미터의 순서가 다를때 public void overloading(int x, byte y) { } public void overloading(byte y.. 2021. 1. 26.
Java 자료형 Primitive Type 별도의 객체 생성 없이 선언하여 바로 사용할 수 있는 데이터 타입이다 자바의 기본 자료형은 아래 테이블과 같다 분류 이름 메모리 default 범위 논리 boolean 1 bit false true or false 문자 char 2 byte '\0' '\u0000' ~ 'uFFFF' 정수 byte 1 byte 0 -128 ~ 127 short 2 byte 0 -2^16 ~ 2^16-1 int 4 byte 0 -2^31 ~ 2^31-1 long 8 byte 0 -2^63 ~ 2^63-1 실수 float 4 byte 0.0 -3.4E38 ~ 3.4E38 double 8 byte 0.0 -1.7E308 ~ 1.7E308 java에서 String은 기본 자료형이 아닌 reference.. 2021. 1. 25.