문제 

 

코딩테스트 연습 - 실패율

실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스

programmers.co.kr

2019 KAKAO BLIND RECRUITMENT 출제 문제이다.

뭔소린가 싶은데 문제에 친절하게 실패율 공식도 적혀있고 입출력 설명도 자세해서 그대로 짜면 된다.

 

  • 실패율은 다음과 같이 정의한다.
    • 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수

 

풀이

def solution(N, stages):
    answer = []
    score = collections.defaultdict(float)

    for i in range(1, N + 1):
        success = 0
        stop = 0
        cur = 0
        for x in stages:
            if x >= i:
                success +=1
            if x == i:
                stop +=1
        if success == 0 or stop == 0:
            score[i] = 0 # 0 나누기 예외처리
        else:
            score[i] = stop/success

    score = sorted(score.items(), key=lambda x: x[1], reverse=True)  # dict v기준 내림차순정렬

    for k in score:
        answer.append(k[0]) 

    return answer

위 입력값(N, stages)으로 실행 후 실패율 내림차순(reverse=True)으로 딕셔너리를 정렬했다.

(오름차순은 따로 지정안해줘도 됨~~~)

score 딕셔너리 정렬전/후, answer 리스트 출력

끝!

반응형

문제

 

코딩테스트 연습 - 없는 숫자 더하기

0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.

programmers.co.kr

 

풀이

import collections 

def solution(numbers):
    answer = 0
    dic = collections.defaultdict(int)
    
    for x in numbers:
        if str(x) not in dic:
            dic[str(x)]+=1
    
    for x in range(10):
        if str(x) not in dic:
            answer+=x
    
    return answer

입출력 예시

반응형

문제

 

Most Common Word - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

문자열에서 금지된 단어 (banned)를 제외한 단어들 중 가장 빈도수가 높은것을 출력하는 문제이다.

 

입출력

#Case 1
Input: s = "Bob hit a ball, the hit BALL flew far after it was hit.", banned = ["hit"]
Output: "ball"

#Case 2
Input: s = "a.", banned = []
Output: "a"

#Case 3
Input: s = "Bob", banned = []
Output: "bob"

 

풀이

class Solution:
    def mostCommonWord(self, s: str, banned: List[str]) -> str:
        
        word = []       
        dic = collections.defaultdict(int)
        s = s.lower()
        
        for x in s : 
            if x.isalpha() == True:
                word.append(x)
            
            else:
                w = "".join(word) #list > str
                if w not in banned and w != '': 
                    dic[w]+=1
                word=[]
        
        #for문에서 else문 안 탄 경우 딕셔너리 추가 
        w = "".join(word)  
        if w not in banned and w != '': 
            dic[w]+=1
                    
        res = collections.Counter(dic)
        
        #Couter 객체의 가장 빈도수가 높은 key값(단어) return
        return res.most_common(1)[0][0]

 

희히

반응형

문제

 

Valid Palindrome - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

팰린드롬 : 앞뒤가 똑같은 단어/문장
주어진 문자열이 팰린드롬인지 검증하는 문제이다. 대소문자는 구분하지 않고, 영문자와 숫자만 해당된다.

#예제
Input: s = "A man, a plan, a canal: Panama"
Output: true
Explanation: "amanaplanacanalpanama" is a palindrome.


풀이

#1 deque 사용 
class Solution:
    def isPalindrome(self, s: str) -> bool:
        
        s = s.lower()
        dq = collections.deque()
        
        for x in s:
            if x.isalnum():
                dq.append(x)
                
        while len(dq) > 1 : 
            if dq.popleft() != dq.pop():
                return False
            
        return True
#2 슬라이딩 사용 
class Solution:
    def isPalindrome(self, s: str) -> bool:
        
        s = s.lower()
        result = []
        
        for x in s:
            if x.isalnum():
                result.append(x)
                
        if result == result[::-1] :    
            return True
       
        return False


결과

반응형

유튜브에서 카카오스타일 숏다큐멘터리를 보고 자율적이고 책임감 있는 회사분위기에 복지와 전망도 좋은 회사인 것 같아 백엔드 개발자 상시채용에 지원했다.

전형을 진행하며 전체적인 소감은
전형일정이 빠르게 진행되어 좋았고 상시채용이어서인지 지원자들의 일정을 많이 배려해주는 느낌을 받았다.
전형을 안내해주시던 인사담당자님도 친절하시고 문의답변도 굉장히 빨라서 감사했다.

전형 관련 안내 메일들



1. 서류 (합격)


카카오스타일은 원티드와 사내 채용사이트로 지원이 가능하다. 지정 양식은 없으며 개인 포폴과 이력서로 지원했다.
2일 뒤 메일로 결과를 받았고 온라인 태스크(과제)가 있으니 개인 github 계정을 요청하셨다.
계정을 회신하자마자 계정으로 request가 왔다.


2. 온라인태스크 (합격)

request를 받은날부터 주말포함 1주일 기간이 주어졌고 (제출마감은 17시)
결과도 제출마감일 1주일 뒤에 메일로 안내받았다.
자세히 쓰긴 어렵지만 request에 readme 파일로 두 문제 중 하나를 선택해 요구하는 기능들을 모두 구현하는 과제였다.
나는 spring boot 프로젝트로 스프링시큐리티와 jpa를 사용해 구현했고 (사실 둘다 이번에 처음 사용해봄) 두문제 다 웹 토이프로젝트 난이도로 간단한 인사시스템을 생각하면 될 것 같다.
스프링 프로젝트에 익숙한 사람이라면 어렵지 않게 구현할 수 있을 것 같다.


3. 1차면접 (화상/2대1/불합격)

과제 마감일 1주일 뒤 메일로 합격결과와 1차면접 안내를 받았다.
화상면접으로 1시간 30분 소요예정으로 안내받았고 세 날짜 중에 가능한 일시를 회신해달라고 요청받았는데 당장 결과가 나온 다음날도 면접일정으로 잡혀있어 당황했다.. ㅋㅋ
현재 재직중인 회사 일정때문에 가능한 날짜가 없다고 연락드리니 가능한 날로 조정해주셨다.

지원한 직무 현직자 두 분과 2대1로 면접을 진행했으며 1시간 정도 소요되었다. (압박면접X)
현직자분들의 간단한 팀 소개와 본인 소개를 듣고 준비한 자기소개를 했는데 30초 분량으로 가볍게 준비하는게 좋을 것 같다.

1시간 반이 소요예정시간으로 잡힌 것 만큼 거의 모든걸 물어본다.
본인의 장단점 같은 기본 질문부터
과제리뷰 > 특정 기술 사용 시 왜 사용했는지, 원리
현재 맡고 있는 직무와 개발, 배포 환경, 프로젝트 경험
이전 회사에서의 경험 등등
경력 질문이 끝난뒤 아무래도 주니어다보니 CS질문도 많았다. (트랜잭션, 인덱스, RESTful API 등)

작년에 당근 면접에 데여놓고 이번에도 기술면접을 잘 준비하지 못한 내가 너무 한심했다..ㅠㅠ

당분간은 지원은 쉬면서 코딩테스트와 CS공부를 할 예정이다.

마지막으로 내가 감명받았던 지그재그 다큐로 마무리.....

반응형

문제

(코딩테스트 연습 > 2021 카카오 채용연계형 인턴십 > 숫자 문자열과 영단어)

 

코딩테스트 연습 - 숫자 문자열과 영단어

네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자

programmers.co.kr

입출력 (s : str, result : int) 예시대로 영단어는 숫자로 변환하면 된다.

풀이

def solution(s: str) -> int: #인자 자료형, 메소드 반환형 명시
    result = s
    dict = {'zero': '0', 'one': '1', 'two': '2', 'three': '3', 'four': '4',
            'five': '5', 'six': '6', 'seven': '7', 'eight': '8', 'nine': '9'}

    for item in dict.items():
        result = result.replace(item[0], item[1])

    return int(result)

파이썬 딕셔너리와 items()을 이용해 풀이했다.

반응형

파이썬 딕셔너리 사용 시 유용한 컨테이너 자료형들의 용도와 사용법을 정리해보았다.

 

1. defaultdict

딕셔너리는 존재하지 않는 인덱스/키를 조회, 삭제 연산 시 각각 IndexError, KeyError가 발생한다.

그래서 다음처럼 에러가 발생하는 경우를 예외처리 하는 방법도 있다.

    a = {}  # 빈 딕셔너리
    
#1 try-except
    try:
        print(a['key'])  # 없는 키 조회 시
        del a['key']  # 없는 키 삭제 시
    except KeyError:
        print('KeyError 발생')

#2 if문
    if 'key' in a:
        print('Key 존재')
    else:
        print('존재하지 않는 Key')

 

defaultdict 객체는 존재하지 않는 키에 대한 연산을 할때 디폴트 값을 기준으로 딕셔너리 키:값을 생성해준다.

int, list 등 다양한 형태로 딕셔너리를 만들 수 있다.

list 딕셔너리는 키에 문자열도, 리스트도 삽입할 수 있다. 값을 넣어 줄 때는 리스트처럼 append를 사용하면 된다.

 

    a = collections.defaultdict(int) 
    a['key'] += 10
    print(a) #defaultdict(<class 'int'>, {'key': 10})
    
    b = collections.defaultdict(list) 
    b[0].append([1,2,3])
    b[0].append('to')
    print(b) #defaultdict(<class 'list'>, {0: [[1, 2, 3], 'to']})

 

 

 

2. Counter

Counter는 아이템에 대한 개수를 계산해 딕셔너리로 리턴한다. (개사기)

most_common(n) 로 Counter 객체의 n번째까지 빈도가 높은 요소를 출력할 수도 있다.  

    a = [2,4,1,1,1,1,5,5,5,3,6]
    b = collections.Counter(a)
    print(b) #Counter({1: 4, 5: 3, 2: 1, 4: 1, 3: 1, 6: 1})
    print(b.most_common(2)) #[(1, 4), (5, 3)]

 

+ 딕셔너리는 해시테이블을 이용한 자료형으로 입력 순서가 유지되지 않아 입력순서를 유지하려면 OrderedDict 이라는 객체를 사용해야했으나 파이썬 3.7부터는 딕셔너리도 내부적으로 인덱스를 이용해 입력 순서가 유지되도록 개선됐다.

 


Reference

책) 파이썬 알고리즘 인터뷰 (박상길) 

반응형

INDEX 인덱스 (색인)

 

  • 책으로 비유하자면 목차
  • DBMS에서 저장 성능을 희생하여 데이터 읽기 속도를 높이는 기능
  • 데이터가 정렬되어 들어감
  • 양이 많은 테이블에서 일부 데이터만 불러 왔을 때, 이를 풀 스캔 시 처리 성능 떨어짐

 

  • 종류
    • B+-Tree 인덱스 : 원래의 값을 이용하여 인덱싱
    • Hash 인덱스 : 칼럼 값으로 해시 값 게산하여 인덱싱, 메모리 기반 DB에서 많이 사용
    • B>Hash
  • 생성시 고려해야 할 점
    • 테이블 전체 로우 수 15%이하 데이터 조회시 생성
    • 테이블 건수가 적으면 인덱스 생성 하지 않음, 풀 스캔이 빠름
    • 자주 쓰는 컬럼을 앞으로 지정
    • DML시 인덱스에도 수정 작업이 동시에 발생하므로 DML이 많은 테이블은 인덱스 생성 하지 않음
반응형

올해 여름,

'당근마켓 팀' 유튜브를 구독하고 당근마켓이라는 기업에 관심이 생겼다.
작년부터 1년 동안 오창에서 지내며 당근마켓앱을 아주아주 잘 써왔는데
유튜브를 통해 기업의 목적과 방향, 서비스 소개 영상들을 보며 개발자로서도 아주 가고싶어지는 기업이 되어버렸다.
(역시 네카라쿠배당토)

원티드에서 당근마켓 백엔드 직무로 포폴을 넣어봤다.
PDF 형식으로 제출했고 제출 시 입력했던 이메일로 하루만에 회신이 왔다.



당근마켓 면접 후기는 구글, 잡플래닛 등에서 많이 볼 수 있었는데
후기를 보면 1차는 주로 스피드퀴즈 형식이라고 했다..

고것을 잘...숙지했어야 했는데...
나는 경력이뉘까~~ 하는 마인드(근자감무엇;;;)로 자기소개랑 프로젝트 소개를 한번 더 정비하고
혹시나 싶어서 MSA 관련 컬럼과 MVC 패턴만 살짝 공부하고 면접을 보게 되었다.....

꽤 지난 일인데도 글을 쓰면서 다시 수치심이 든다 흑흑

면접은 화상으로 이뤄졌고 정말 인터넷에서 볼 수 있는 후기대로 스피드 퀴즈였다.
자기소개도 묻지 않았으며 면접관(지원한 직무의 실무자)이 간단히 본인 소개 후 질문을 시작했다...

1. DB
2. WEB
3. JAVA
4. SPRING

위 네 분야에 대해 질문이 들어왔고 대답을 잘했다 싶으면 추가질문을 했다.
압박은 전혀 없었지만 정말 지원자가 어디까지 아는지 궁금해서 질문을 하는듯 ㅎㅎ 하다.

답변을 하면서 계속 'X됐다' 생각만 들었고
특히 DB 분야에서 모르겠습니다.. 답변이 연속적으로 나왔다...ㅋㅋ....
JAVA 백엔드 직무로 지원해놓고 JAVA 답변도 아주 시원하게 말아먹었다. 악!!!

내가 정말 관심있게 공부를 해야 대답할 수 있을 수준의 질문들이니
절대 절대 겉핥기로 공부해가면 망한다.. ㅋㅋㅋㅋ..

면접은 확실하게 망해버렸지만 면접관님이 계속 내가 더 대답할 수 있도록 도와주셔서인지
아이러니하게도 당근마켓에 더 가고싶어졌다..
1차 면접을 합격했더라면 과제전형도 경험해보았을텐데 너무 아쉬웠다...

스킬업해서 가겠습니다... 당근이 딱기다려...

내 맘도 몰라주는 해맑은 당근이
반응형

결과 스뽀 V


최종합격했던 IBK시스템 면접 후기를 쓴다...
1,2차 면접 모두 IBK시스템 충무로 본사(명동역)에서 이뤄졌으며 면접비를 3만원 씩 받았다.
1차는 평상복, 2차는 정장으로 안내를 받았는데 지원자 중 평상복을 입은 사람은 한명도 없었던 것 같다 ..ㅋㅋ
면접결과는 면접날짜 + 6~7일 후에 나왔다.



1차

1차 면접은 실무면접으로 다대다였고 동성 지원자들끼리 면접을 봤다.
사실 IBK시스템은 2020때도 최종 면접까지 갔었는데 당시에는 쌩신입이어서 긴장도 많이했고
스스로 느끼기에도 역량이 타 지원자보다 부족해서 최종 면탈을 했던 것 같다ㅠ

2020때 1차 면접에서는 기술적인 질문 + 학부 프로젝트 질문들이 많이 들어왔었는데
올해 1차에서는 경력을 쌓고 와서인지 기술질문보다 경력관련 질문이 많이 들어왔다.

쌩신입지원자한테는 본인이 작성한 자기소개서 및 프로젝트에 관련해 사실확인 + 약간의 응용으로 질문을 했다.
같이 면접본 지원자 중에 비개발직군 경력지원자도 있었는데 기술 관련 질문을 꽤 받았다.
자바 프로젝트 경험에 대해 중요하게 생각한다. (회사 주언어가 자바라 그런듯 하다.)

공통질문 : 자기소개, 자신있는 프로젝트, 마지막 할말

마지막 할말은 시간이 부족할때는 중요하지는 않는 것 같다. 짧고 깔끔하게 준비해가는걸 추천한다.


꺄호~


2차

2차 면접은 임원면접으로 1차와 같이 다대다, 동성 지원자들끼리 면접을 봤다.
임원 + 외부면접관이 면접을 진행했으며 1차 면접때보다 소요시간은 적었다.


공통질문 :
IBK시스템의 장단점
본인 역량에 근거하여 입사 했을 시 회사에 줄 수 있는 긍정적인 영향
입사 후 5년 뒤 본인의 모습


대략 위와 같이 일반적인 임원면접 질문들이 주였고
개인 질문으로는 상황질문이 많았다. (본인이 PM이라면, PM과 회의 중 ~한 상황이라면 등)
실무면접때와 질문이 겹치기도 했다. (프로젝트 경험)

나같은 경우는 당시 회사에 재직 중이어서 IBK시스템에 합격된다면
이후 현회사와 어떻게 협의 후 나올 건지 등에 대해서도 질문이 들어왔다.


개발직군 경력 지원자들에는 공통적으로 질문을 유하게 한 느낌을 받았지만
그렇다고 쌩신입을 적게 뽑진 않는다! 그리고 경력이어도 떨어진 사람도 있으니
타 지원자를 의식하지말고 편하게 본인을 최대한 어필하는게 가장 중요한 것 같다.

반응형

+ Recent posts