분류 전체보기 50

2022 KAKAO BLIND RECRUITMENT 1차 코딩테스트 후기

총평: ?????? Q1 사용된 알고리즘: 그래프 탐색 or 해시 예상 난이도 (Solved.ac 기준): S3 신고 구조를 그래프로 그리거나, 그냥 단순히 저장하는 방식으로 해결할 수 있다. 이후에 k번 이상 (전자의 경우엔 진입간선의 수로, 후자의 경우 데이터의 갯수로) 신고된 데이터만 따로 뺀 이후, 다시 신고 데이터를 돌려주면 해결. 1번 난이도가 맞는 것 같기도 하고 아닌 것 같기도 하고... Q2 사용된 알고리즘: 문자열 처리 예상 난이도 (Solved.ac 기준): S4 오히려 이게 1번이 아닌가 싶었다. 진법 변환을 진행한 이후, 정규표현식을 사용하거나 반복문을 사용해서 문자열 처리를 진행하면 된다. 대충 처리할 시 맨 앞에 0이 붙는 똑같은 두 숫자가 올 수 있으니, 잘 체크해서 넣도록 ..

기타/후기 2021.09.11

2021 하반기 SW개발 신입 LINER 공개채용 코딩테스트 후기

9/11 09:30 ~ 12:30 LINE 코딩테스트가 열렸다. 아우 팔아파 2020년 하반기/2021년 상반기의 시험과 비교해서, 구현 자체의 난이도는 높지 않았던 것 같다. 프로그래머스 및 라인의 정책상 문제 설명 및 코드를 올릴 수는 없지만, 작성할 수 있는 선에서 최대한 작성해보는걸로... Q1 사용한 알고리즘: 브루트포스, 단순 구현 예상 난이도 (Solved.ac 기준): B2 단순 중첩 반복문을 사용하면 쉽게 해결할 수 있다. 정말 점수 주는 급의 문제라 긴 코멘트는 생략... Q2 사용한 알고리즘: 해시 예상 난이도 (Solved.ac 기준): S3 단어의 글자수의 제한이 없다면 쪼금 어려울 수 있었는데, 검색어의 기준이 1글자로 제한되어서 난이도가 대폭 하락한 문제... research ..

기타/후기 2021.09.11

[오픈소스 컨트리뷰션 아카데미] Backend.ai 개발환경 구축

인터넷을 뒤져보다가 오픈소스 컨트리뷰션 아카데미라는 것을 찾아보게 되었다. 오픈소스에 관심이 있었지만, 기여할 기회는 거의 없었던 나로썬 매우 좋은 기회라고 생각했고, 관심있는 프로젝트를 찾아보았다. 여러 흥미로운 프로젝트가 있었지만, 그 중에서도 가장 관심있는 백엔드 파트가 있는 (다른 프로젝트도 있긴 하지만 사용해 본 적이 거의 없는 기술스택이었기에 넘겼다.) Backend.ai와 Yorki에 지원해보기로 하였다. 각 프로젝트에 지원하기 전 간단하게 개발환경 구축을 요구했기에, 각각에 대해 진행해본 후기를 남겨보려고 한다. 현재 내 컴퓨터의 경우, Windows 10 + WSL2 (Ubuntu 18.04)의 환경과 네이티브 리눅스 (Ubuntu 20.04)가 듀얼부팅 상태로 공존 (?) 하고 있다. ..

Programming 2021.07.26

2021 카카오커머스 백엔드 개발자 공개채용 1차 코딩테스트 후기

어... 아무래도 코딩테스트에 썩 적합하지 않은 언어들만 가능해서 그런지 (데이터 분석 분야를 제외하면, FE - JS, BE, Android, iOS - Java, (일부 Kotlin) iOS - Swfit) 난이도 자체는 어렵게 나오지 않았다. 덕분에 25분컷... 다만 기존 카카오 코딩테스트와 달리 채점 결과를 보여주지 않기 때문에, 함정 문제가 있었다는 것은 주의해야 할 것 같았다. #1 Topic: 카운팅 정렬을 약~~~간 변형한 값 담기 예상 난이도 (Solved.ac 기준): S5 ~ S4 상품을 바꾸는거에 초점을 맞추지 말고, 자기가 원하는걸 못 받는 사람들에 포커스를 맞춰보자. 바꾸는건 자기들 알아서 할테고, 어떻게든 열심히 바꾸면 존재하는 선에선 잘 바꿀 수 있을 것이다. 즉, 주어진 ..

[Effective Java] item28 - 배열보다는 리스트를 사용하라

배열보다는 리스트를 사용하라!앞 아이템에서 살짝 설명했는데, 배열은 공변성을 갖고 있고 리스트는 그렇지 않다. 다시 말해서, sub와 super가 상/하위 클래스 관계라면, sub[]는 super[]의 하위 타입이 되는 것이다.Object[] arr = new Long[140]; arr[0] = "들어갈까?"; // 들어갈리가 없다.'문법'상 틀린 코드는 아니지만, 상식적으로 들어갈리가 없다는걸 알 것이다. 이런 경우 런타임시 ArrayStoreException이 발생하는데, 이는 런타임 과정에서 자신이 담기로 한 원소의 타입을 체킹해서 예외를 반환하는 것이다.앞서 제네릭은 공변성을 갖고 있지 않다고 했는데, 따라서List list = new ArrayList(); list.add("들어갈까?");의 경..

Programming/Java 2021.03.24

[Effective Java] item27 - 비검사 경고를 제거하라

비검사 경고를 제거하라! 제네릭을 사용하기 시작한 순간 컴파일러 경고와 친구가 될 것이다... 특히 제네릭에 익숙해지지 않으면 온갖 기묘한 경고들을 마주하게 될 것이다. 요즘은 인텔리제이같은 훌륭한 IDE가 있어서 수많은 경고를 미리 체크해주지만, 만약에 그런 IDE를 쓰지 않으면 javac 명령줄 인수에 -Xlint:unchecked를 붙여주자. (비검사 경고!) Set exaltation = new HashSet(); 이런 코드가 있다고 하자. 딱 봐도 문제가 있는걸 깨달을 수 있을 것이다. 위에서 명시한 Xlint 옵션을 붙여주면 컴파일러에서 어떤식으로 수정해야 하는지 제시해주고, 그거에 맞춰 수정해주면 된다. (사실 IDE가 좋으면 알아서 고쳐준다.) 자바7 부터는 다이아몬드 연산자를 활용해 컴파..

Programming/Java 2021.03.24

[Effective Java] item26 - 로타입은 사용하지 말라

로타입은 사용하지 말라! 제네릭이 뭐였더라? 클래스와 인터페이스 선언 과정에서 타입 매개변수를 사용하게 된다면, 우리는 그것을 제네릭 클래스/인터페이스라고 한다. 각각의 제네릭 타입은 일련의 매개변수화 타입을 정의하고, 이어서 괄호 안에 실제 타입 매개변수들을 나열한다. (ex. list: 원소의 타입이 String인 리스트를 뜻하는 매개변수화 입이고, 여기서 String은 정규타입 매개변수 E에 해댕하는 실제 타입 매개변수) 동시에, 제네릭 타입을 하나 정의하면 그에 따른 로 타입 (Law Type)도 함께 정의되는데, 이는 타입 매개변수를 전혀 사용하지 않은 제네릭 타입이다. 즉, List를 선언했으면, 그에 따른 로 타입은 List가 되는 것이다. 왜 이런게 필요한걸까? 이유는 제네릭이 도입되기 전..

Programming/Java 2021.03.24

[Effective Java] item25 - 톱레벨 클래스는 한 파일에 하나만 담으라

톱레벨 클래스는 한 파일에 하나만 담으라!사실 일반적으로는 톱레벨 클래스를 한 파일에 두 개 이상 담는 일이 거의 없다. 특히 어지간한 IDE에서는 절대로 그런짓을 못 하게 한다. 왜 그럴까?이 책에 따르면, "한 클래스를 여러 가지로 정의할 수 있으며, 컴파일하는 순서에 따라 어떤 것을 사용하는지 달라진다." 라고 적혀있다. 직접 코드를 짜보자.// Driver.java public class Driver { public static void main(String[] args) { System.out.println(MainMenu.NAME + SideMenu.NAME); } } // MainMenu.java class MainMenu { static final String NAME = "Chicken"..

Programming/Java 2021.03.24

[Effective Java] item24 - 멤버 클래스는 되도록 static으로 구성하라!

멤버 클래스는 되도록 static으로 구성하라!가끔 다른 코드를 보면 클래스 내에 정의된 중첩 클래스 (Nested Class)가 있을때가 많다. 이 경우 중첩 클래스는 반드시 자신을 감싼 바로 바깥 클래스에서만 사용할 수 있다.이 책에서는 중첩 클래스의 종류를 정적 멤버 클래스, (비정적) 멤버 클래스, 익명 클래스, 지역 클래스로 분류하고 있는데, 이번 아이템에서는 각각의 중첩 클래스에 대해 맛 볼 것이다.정적 멤버 클래스는 다른 클래스 내부에 선언되고, 바깥 클래스의 private에 접근할 수 있는 점만 빼면 일반 클래스와 동일한 역할을 하고, 흔히 바깥 클래스와 함께 쓰일 때만 유용한 public 도우미로 사용된다. public으로 사용하기 때문에 Calculator.Operation.PLUS 같..

Programming/Java 2021.03.16

[Effective Java] item23 - 태그 달린 클래스보다는 클래스 계층구조를 활용하라!

태그 달린 클래스보다는 클래스 계층구조를 활용하라!사실 이 부분은 별로 와닿지 않는 부분이긴 하다. '당연한거 아닌가?' 싶긴 한데... 그래도 일단 정리해보았다.클래스에 두가지 의미가 있는 요상한 경우가 있다고 해보자. 이번엔 영화관 예시를 들어보자. 이 영화관 멤버십 제도는 일반/VIP로 나뉜다고 하자. VIP를 유지하기 위해선 1년간의 영화 관람 기록을 기반으로 마일리지를 계산해서 판단하지만, 일반이 VIP로 올라가기 위해 1년간 영화를 꾸준히 보는건 어려우니 한달간 관람한 영화를 기준으로 마일리지를 계산해서, 조건이 되면 3개월 후 올려준다고 하자.이걸 하나의 클래스로 묶어버리면, 다음과 같이 될 것이다.public class MemberShip { enum MemberClass { NORMAL,..

Programming/Java 2021.03.16