본문 바로가기
2022 카카오페이 신입 서버 개발자 코테 후기 자료구조/알고리즘 3문제, SQL 2문제가 출제되었다. 전체적인 느낌은 생각보다 할만했다! 물론 한 문제는 큰 틀은 감을 잡을 듯 했지만 진행하지 못해서 아쉽지만 나머지는 고민한 대로 해결할 수 있었다. 그리고 외부 복사/붙여넣기가 되지 않아서 자료구조/알고리즘 문제는 옮겨적느라 한 문제당 10분 정도 더 소요되었다. 첫 번째 문제는 여러 조건을 따지기 위해 필요한 필드를 가진 지원자 클래스를 새로 만들고, 이를 담는 List와 PriorityQueue를 사용해 해결했다. 지원자 정보를 담은 객체를 생성해 list에 담고, 조건에 해당하는 지원자를 PriorityQueue에 담아 순서대로 poll하면서 순서를 매겼다. 문제에 주어진 조건대로 PriorityQueue에서 poll 할 수 있도록 Priori.. 2022. 5. 19.
창고 다각형 - 백준 2304 (Java) https://www.acmicpc.net/problem/2304 처음 풀이 1. 기둥 정보 입력 받아 각 기둥에 대해 Pole 객체를 만들고 List에 저장, 위치를 기준으로 정렬 static class Pole { int location; int height; public Pole(int location, int height) { this.location = location; this.height = height; } } public static void main(String[] args) throws IOException { int totalPole = Integer.parseInt(bf.readLine()); StringTokenizer st = null; List poleList = new Ar.. 2022. 5. 19.
2022 그렙 개발자 채용 챌린지 코테 후기 총 6문제가 출제됐다. 알고리즘 4문제, SQL 2문제 먼저 SQL문제는 두 문제다 쉬운 편이었다. 첫 번째 SQL문제는 서브쿼리를 써서 원하는 평균값을 구하고 해당 값을 WHERE절에 넣어 원하는 답을 얻었다. 두 번째 SQL문제는 어떤 한 열의 값에 따른 순위를 매겨야 했다. MySQL에 여러 Rank function이 있는데 그 중 같은 값에 대해서 같은 순위를 주고, 다음 순위에 대해 바로 다음 숫자가 나오는 (2위가 2명이라면 다음 사람은 4위가 아닌 3위) DENSE_RANK() OVER() 함수를 사용했다. 첫 번째 알고리즘 문제는 규칙을 금방 찾아서 20분 정도 걸려 풀었다. 전광판의 시작과 끝에 해당하는 포인터를 양 쪽에 두었다. 그리고 처음 주어진 문자열은 앞에 전광판 길이만큼 빈 칸을.. 2022. 5. 15.
에디터 - 백준 1406번 (Java) 처음 풀이 1. 커서를 포인터로 생각하여 현재 커서 위치에 해당하는 index값을 저장할 pointer 변수를 둔다. 2. StringBuilder에 문자열을 담아두고, StringBuilder 메서드인 deleteCharAt()과 insert()를 이용해 명령값과 현재 pointer 값에 따라 내부 문자열을 수정한다. public static void main(String[] args) throws IOException { BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(bf.readLine()); //현재 문자열 맨 마지막에 커서 위치해야 한다. int.. 2022. 5. 14.
OOP의 특성 - 2. 다형성 다형성이란 단어를 살펴보면, 다양한 형태를 가지는 성질이라고 풀이할 수 있다. 이를 프로그래밍에 적용해보면, 다음과 같다. 하나의 객체는 여러 타입을 가질 수 있다. 프로그래밍에서는 타입을 구현하는 방식 중 하나로 '클래스'라는 개념을 주로 사용하기 때문에, 위 내용을 조금 바꿔보면 다음과 같다. 하나의 객체는 여러 클래스를 가질 수 있다. 여기서 객체가 아무 클래스나 다 가질 수 있는 것은 아니다. 객체는 기본적으로 자신의 클래스를 가지고 있다. 거기에 자신의 클래스와 상속관계에 있는 상위 클래스, 하위 클래스를 가질 수 있다. 타입 변환 타입 변환이라는 개념은 기본자료형 내용에서도 등장한다. 기본 자료형만 타입 변환이 가능한 것이 아니라 참조 자료형도 타입 변환이 가능하다. 자동 타입 변환 단어에서도.. 2022. 5. 13.
OOP의 특성 - 1. 상속 Java는 OOP의 특성 중 하나인 상속을 지원한다. 상속받는 하위 클래스의 이름 옆에 'extends 상위 클래스'를 적어주면 된다. public class Lower extends Upper { ... } 상속은 말 그대로 부모의 재산을 자식이 물려받는 것이다. 이를 프로그래밍에 적용해보면, 상위 클래스(부모)가 가지는 멤버(필드, 메서드)를 하위 클래스(자식)가 그대로 사용할 수 있다는 의미다. 더 나아가 'extends' 키워드에서 알 수 있듯이 하위 클래스는 상위 클래스를 확장한다는 의미까지 될 수 있다. 하지만, 상위 클래스의 모든 멤버를 하위 클래스가 사용할 수 있는 것은 아니다. 상위 클래스 멤버의 접근제어자에 따라 사용 가능 여부가 결정된다. Lower 클래스(하위 클래스)와 Upper .. 2022. 5. 12.
5월 스페셜 강연 <이력서 특강> 부트캠프 한 달이 채 안된 시점에 코드스테이츠에서 이력서 특강이 있다고 해서 신청했다. 처음에는 아직 이력서 작성하는 기간이 아니라 들을까 말까 고민했지만, 분명 미리미리 준비해야 할 내용이 있을거라 생각해서 들었다. 결론은 듣길 잘했다! 부트캠프에서 수업을 열심히 따라가는 것 이외에 내가 평소에 해야할 것이 무엇인지 큰 그림을 초반에 잡을 수 있어서 좋았다. 또한, 내가 나아가고자 하는 방향이 옳다는 확신을 얻을 수 있어서 좋았다. 핵심만 간단하게 정리하면 다음과 같다. 자신이 개발 직군의 핵심 역량을 갖추고 있음을 드러낼 수 있도록 작성한다. 이력서는 결국 사람이 읽는 것이기 때문에 읽는 사람을 최대한 배려해서 작성해야 한다. (페이지 수, 글 가독성 등) 자신이 성장 가능성이 있고, 열정이 있다는 .. 2022. 5. 11.
생성자 생성자를 한 문장으로 정리하면 다음과 같다. 인스턴스를 생성할 때 인스턴스 변수를 초기화하기 위해 호출되는 메서드 생성자가 인스턴스를 생성하는 것이 아니라, 인스턴스 변수 초기화의 역할을 한다. 인스턴스 생성은 new 키워드의 역할이다. Test test = new Test(); new 키워드로 다음 과정이 진행된다. -> Heap메모리에 Test 클래스 인스턴스를 저장할 공간을 할당받고. 인스턴스를 생성한다. 그리고 해당 공간의 참조값(주소)을 리턴하고, 올바른 매개변수 형식의 Test 클래스 생성자를 호출한다. 생성자가 호출되면 생성자 내부로직에 의해 인스턴스 변수가 초기화된다. 스택 영역에 위치한 test변수에는 new 키워드가 리턴한 참조값이 저장된다. 필드 초기화 인스턴스가 생성될 때 각 멤버필.. 2022. 5. 11.
static 멤버 필드나 메소드에 static 키워드를 붙이면 정적 멤버가 된다. 정적 멤버는 객체를 생성하지 않고 클래스에 직접 접근할 수 있는 필드와 메소드를 말한다. 정적 멤버가 되면 더 이상 객체가 아닌, 클래스 자체에 소속되기 때문에 클래스 멤버라고도 한다. 정적 멤버는 JVM의 class loader가, 자바 컴파일러가 .java 파일을 컴파일한 .class 파일 (바이트 코드)을 JVM이 할당받은 메모리 영역인 Runtime Area에 속한 method area (class area)에 올릴 때 클래스 별로 관리된다. 즉, 정적 멤버에 대한 정보는 method area에 있다. 해당 클래스를 바탕으로 만들어질 여러 객체가 공유하고 있을 데이터라면 정적 필드로 선언하고, 객체마다 고유의 값을 가질 데이터라.. 2022. 5. 10.
객체지향의 사실과 오해 1 객체지향의 사실과 오해 (조영호 지음) 책을 요약/정리한 글입니다. 1장 협력하는 객체들의 공동체 객체지향의 목표는 실세계를 모방하는 것이 아니라 새로운 세계를 창조하는 것이다. - 현실세계와 비교해가면서 객체지향에 대한 개념을 설명하는 것이 이해하기 쉽고, 또 많은 부분이 비슷하기 때문에 가능한 일이지만, 프로그램을 실제로 설계하고, 구현하는 실무적인 관점에서는 부적합하다. 객체지향의 중요한 개념 세 가지는 역할, 책임, 협력이다. 시스템은 역할과 책임을 수행하는 객체로 분할되고, 시스템의 기능은 객체 간의 연쇄적인 요청과 응답의 흐름으로 구성된 협력으로 구현된다. 적절한 객체에게 적절한 책임을 할당하는 것에서부터 객체지향은 시작된다. 객체지향 설계의 묘미는 다른 객체와 조화롭게 협력할 수 있을 만큼 .. 2022. 5. 10.