LV3 [KAKAO] 경주로 건설
·
프로그래머스
문제 https://school.programmers.co.kr/learn/courses/30/lessons/67259 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 dfs 에 dp 테크닉을 조금 섞은 문제였다. 우선 경로에 따른 값 처리를 생각했다. 직선도로 같은 경우에는 방문한 칸 - 1 개였다. 만약 7칸을 방문한다면 코너와 상관없이 직선코너는 6개가 있다. 코너같은 경우에는 이전에 내가 어느 방향에서 왔는지를 기억하고, 그에 따라서 코너인지 아닌지 판단하기로 했다. 만약 왼쪽에서 오른쪽으로 왔는데 내가 갈려는 방향이 오른쪽이면 같은 방향이므로..
LV1 [KAKAO] 개인정보 수집 유효기간
·
프로그래머스
문제 https://school.programmers.co.kr/learn/courses/30/lessons/150370# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 문자열을 파싱한다음 날짜를 비교하면 된다. 주의할점은 '달' 만큼 더해준다음, '일' 을 하루 빼줘야하는것이다. "Z 1" "2020.01.02 Z" 일 때 유효기간은 2020.02.02가 아니라, 2020.02.01 이다. 따라서 여기에 대한 처리를 해줘야한다. day가 1이면 month를 감소시켜줘야한다. day도 month도 1이라면 year까지 감소시켜줘야한다. (2020.0..
LV3 [KAKAO] 징검다리 건너기
·
프로그래머스
문제 https://school.programmers.co.kr/learn/courses/30/lessons/64062?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 핵심은, 다리의 일정 K구간이 0이 되면 더 이상 친구들이 다리를 건너지 못한다는 것이다. 문제의 예시를 보자. [2, 4, 5, 3, 2, 1, 4, 2, 5, 1] K는 3이고 총 3개의 연속된 발판이 0이 되면 더이상 건너지 못한다. 한칸씩 전진하면서 K씩 나눠서 징검다리를 보면, [2, 4, 5] [4, 5, 3] [5, 3, 2] [3, 2, 1] [2..
LV3 [KAKAO] 보석 쇼핑
·
프로그래머스
문제 https://school.programmers.co.kr/learn/courses/30/lessons/67258# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 (자바로 풀이했다.) 투포인터를 활용해야하는 문제이다. 배열 크기가 10만이므로, for문 돌리면 시간초과가 나니까.. 처음에는 난 양쪽 끝에서 투포인터를 사용하면 될 줄 알았다. 그러나 이럴 경우 중간에 가장 짧은 구간이 있을경우 캐치하지 못했다. 시간이 꽤나 걸려 카카오 공식 해설을 참조해서 풀었다. 우선 set과 같은 자료구조로 몇 종류의 보석이 존재하는지 체크한다. 이후에 r포..
LV3 [KAKAO] 불량 사용자
·
프로그래머스
문제 https://school.programmers.co.kr/learn/courses/30/lessons/64064 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 우선 banned_id 에 있는 리스트를 돌면서, 이 포맷에는 어떤 user_id 들이 들어갈 수 있을지 초기화 했다. 예시를 보자면 객 패턴에 맞는 user_id를 저장했다. 패턴에 매칭되는걸 확인하는건 우선 길이를 먼저 체크했고, *가 아닌 경우에 문자열이 같은지 확인했다. 이후에는 dfs를 통해서 모든 경우의 수를 만들어보았다. 단, 배열에 중복된 요소는 들어가지 않게 말이다. 결..
LV2 [KAKAO] [3차] 방금그곡
·
프로그래머스
문제 https://school.programmers.co.kr/learn/courses/30/lessons/17683# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 (해당 풀이는 처음 풀었을때의 풀이고, 뒤에 훨씬 간단한 개선 풀이 코드가 있음) 문자열로 들어온 시간을 파싱해서 노래의 재생시간(runningTime)을 구했다. 처음에는 단순히 int로 바꾼다음 끝나는 시간에서 시작시간을 빼면 될거라 생각했으나 "13:50 ~ 14:10" 처럼 끝나는 시간의 '분' 이 더 앞설때 처리하기가 까다로워 datetime 을 활용하여 처리했다. compl..
LV2 [KAKAO] [1차] 캐시
·
프로그래머스
문제 https://school.programmers.co.kr/learn/courses/30/lessons/17680# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 해당 문제는 그냥 LRU 알고리즘 동작 방식을 공부하고 구현하면 된다. LRU를 몰랐다면 못풀었을 거 같은.. 아무튼, LRU는 연결리스트로 구성되어 있기에 노드 클래스를 만들고, 연결리스트 클래스를 만들면 된다. 그리고 연결리스트 가장 앞에 넣는 (최근에 참조되었거나 새로 들어올 경우) 로직을 하나 만들고, 연결리스트를 cacheSize만큼 참조한 다음 매개변수로 들어온 data가 ..
LV2 [KAKAO] [3차] 압축
·
프로그래머스
문제 https://school.programmers.co.kr/learn/courses/30/lessons/17684 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 우선 2번의 조건으로 인해서 문자열의 서브 문자열을 모두 검사해서 사전에 등재한 가장 긴 문자열이 존재하는지 검사하는 줄 알았다. 그러나 두번째 예시를 보니까 그냥 앞에서부터 검사하면 되는거였기에 맞게 구현하였다. 우선 dictionary 구조로 A ~ Z를 키로, 1 ~ 26 을 값으로 초기화 해준다. 이후에는 문자열 첫번째부터 검사하면 되는데 만약 KAKAO이고 내가 검사해야할 위치..
LV2 [KAKAO] 튜플
·
프로그래머스
문제 https://school.programmers.co.kr/learn/courses/30/lessons/64065?language=python3 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 그냥 생각나는대로 막 구현했다. 그래서 코드가 개판이긴한데.. {} 를 기준으로 일일히 파싱했다. 이후에 문자열의 길이순으로 정렬했다. 그 후에 "n1, n2, n3" 형태로 되어있는 문자열을 "," 기준으로 split한 후에, 각 요소에 접근하여 set으로 중복을 체크하고 정답 배열에 넣어줬다. 코드 def solution(s): strs = [] i =..
LV2 [KAKAO] [1차] 프렌즈4블록
·
프로그래머스
문제 https://school.programmers.co.kr/learn/courses/30/lessons/17679 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 간단한 시뮬레이션 문제이다. 4개의 블록을 없애고, 밑으로 옮겨주는 행동을 반복적으로 하다가 없어지는 블록이 더이상 존재하지 않을 경우 답을 return 해주면 된다. 4개의 블록을 없애는 로직은 2차원 배열로 접근한다음 현재위치값과, 아래, 오른아래대각, 오른 좌표들이 모두 같은지 확인한다. (입력으로 들어오는 값은 문자열이라 list로 바꾸어주는 작업을 진행했다.) 같다면 각 좌표들..