프로그래머스 12

자바 - 프로그래머스 / 전화번호 목록

https://school.programmers.co.kr/learn/courses/30/lessons/42577 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr lv2 구현 방법 조건 - phone_book의 길이는 1 이상 1,000,000 이하입니다. - 각 전화번호의 길이는 1 이상 20 이하입니다. - 같은 전화번호가 중복해서 들어있지 않습니다. 효율성 테스트 실패 방법 1. phone_book을 문자열 길이 오름차순으로 정렬한다. 시간복잡도 - 평균 : O(nlog(n)) / 최악 : O(n^2) 2. phone_book 문자열 하나와 그 외 p..

알고리즘 2023.05.28

자바 - 프로그래머스 / 연속 부분 수열 합의 개수

https://school.programmers.co.kr/learn/courses/30/lessons/131701 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr LV 2 구현 방법 3 ≤ elements의 길이 ≤ 1,000 1 ≤ elements의 원소 ≤ 1,000 삼중 포문까지 가능하고, 자료형은 int 써도 된다. 원형 수열을 구현 하는 방법은 "% 배열의 길이"를 이용하면 된다. 1. 삼중 포문 사용 첫번째 포문 - 더할 원소 개수 두번째 포문 - 더할 원소의 시작 인덱스 세번째 포문 - 연속된 합을 구현하기 위해 하지만 현재 문제로는 런타임 ..

알고리즘 2023.05.20

자바 - 프로그래머스 / 짝지어 제거하기

https://school.programmers.co.kr/learn/courses/30/lessons/12973 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr LV 2 구현 방법 문자열의 길이 : 1,000,000이하의 자연수 조건을 통해 시간 복잡도를 고려하여 구현해야 한다. ArrayList로 구현 할 경우, remove() 함수가 O(n)의 시간 복잡도를 가지고, 두 짝을 찾는데에도 O(n)을 가지므로 총 O(n^2)의 시간복잡도를 가지게 된다. 이런 경우, 시간초과가 발생한다. 또한 LinkedList로 구현 할 경우, remove() 함수는 O..

알고리즘 2023.05.05

자바 - 프로그래머스 / 피보나치 수

https://school.programmers.co.kr/learn/courses/30/lessons/12945 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr LV 2 구현 방법 피보나치 보자마자 재귀(Top-down)로 후딱 구현했는데 런타임 에러가 났다. 문제 범위가 "n은 2 이상 100,000 이하인 자연수입니다." 여서, 재귀로 풀 경우 중복되는 계산이 많아져서 비효율적이다. 그래서 dp를 이용해서 반복(Bottm-up)으로 구현했다. 그런데도 오류가 떠서 찾아보니 자바 int 자료형의 경우, -2,147,483,648 ~ 2,147,483,6..

알고리즘 2023.05.03

자바 - 프로그래머스 / 개인정보 수집 유효기간

https://school.programmers.co.kr/learn/courses/30/lessons/150370 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr LV 1 구현 방법 1 ≤ terms의 길이 ≤ 20 1 ≤ privacies의 길이 ≤ 100 런타임 에러 걱정없이 구현 할 수 있다. 문제는 String 형식으로 된 날짜 형식을 어떤 식으로 바꿔서 날짜 비교를 할지 였다. 처음에는 일일히 년,월,일을 StringTokenizer를 이용해서 나누고, 이걸 int 형식으로 바꾸고, 필요한 만큼 더하기 한 후, today와 비교 하는 식으로 구현..

알고리즘 2023.05.03

자바 - 프로그래머스 / [1차]캐시

https://school.programmers.co.kr/learn/courses/30/lessons/17680 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr LV 2 구현 방법 0 ≦ cacheSize ≦ 30 cities는 도시 이름으로 이뤄진 문자열 배열로, 최대 도시 수는 100,000개이다. O(n^2)도 가능하다. 큐를 이용하면 조건에 만족하는 사이즈 내에서 LRU를 만족하며 구현 될거라고 생각했다. 그런데 오류가 떠서 생각해보니까 큐 안에 값이 존재하는 경우, 큐 내에서 위치를 업데이트 시켜 줘야 하는걸 깨닮았다. 그런데 또 오류 떠서 보니..

알고리즘 2023.05.02

자바 - 프로그래머스 / 이모티콘 할인 행사

https://school.programmers.co.kr/learn/courses/30/lessons/150368 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr LV 2 구현 방법 1 ≤ emoticons의 길이 = m ≤ 7 이고, 할인 종류는 10, 20, 30, 40으로 4가지 경우가 있다. 따라서 각 이모티콘 마다 모든 할인 종류를 적용해봐도 4^7으로 런타임 에러 걱정은 없다. 1. 이모티콘별 할인 가능한 모든 방법을 재귀 방식으로 구현한다. (중복 순열 개념이용) 2. 할인 가능한 한가지 순열이 나왔을 때, 우선순위가 있는 아래 조건에 따라 ..

알고리즘 2023.04.28

자바 - 프로그래머스 / 광물 캐기

https://school.programmers.co.kr/learn/courses/30/lessons/172927 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr LV 2 구현 방법 핵심 : diamond, iron, stone 갯수 많은 순서로 좋은 곡괭이 쓰면 최소의 피로도를 얻을 수 있다. 1. (곡괭이 수) * 5와 minerals.length 중 작은 값을 iterSize에 저장한다 => "광산에 있는 모든 광물을 캐거나, 더 사용할 곡괭이가 없을 때까지 광물을 캡니다." 이 조건 때문에 해야함. 이거 안하면 test case 8번 오류 뜬다....

알고리즘 2023.04.24

자바 - 프로그래머스 / 연속된 부분 수열의 합

https://school.programmers.co.kr/learn/courses/30/lessons/178870 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr LV 2 구현 방법 5 ≤ sequence의 길이 ≤ 1,000,000 이므로 이중 포문 돌리면 런타임 에러 뜬다 이럴 때 쓰는 방법이 바로 투 포인터 알고리즘! O(n)으로 가능하다. 투 포인터 알고리즘을 사용해서 시작 부분, 끝 부분 두가지 포인터를 만들어서 원하는 연속된 합에 부합할때 까지 포인터를 움직이는 방법으로 구현했다. 원하는 값보다 작은 경우 끝 부분 포인터를 움직혀 합을 크게 하..

알고리즘 2023.04.24

자바 - 프로그래머스 / 행렬 테두리 회전하기

https://school.programmers.co.kr/learn/courses/30/lessons/77485 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr Lv 2 구현 방법 조건은 queries의 행의 개수(회전의 개수)는 1 이상 10,000 이하입니다. 1 ≤ x1 startRow; j--) { plate[j][endCol] = plate[j - 1][endCol]; min = Math.min(min, plate[j][endCol]); } plate[startRow + 1][endCol] = firstNum; answer[i] = min; } ..

알고리즘 2023.04.21