본문 바로가기

728x90

코딩테스트

[프로그래머스] 연속 부분 수열 합의 개수 / 자바(Java) 문제 https://school.programmers.co.kr/learn/courses/30/lessons/131701 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해설 원형배열이 나오는 문제입니다. 이 경우 인덱스를 어떻게 관리하느냐가 중요한데 기존의 값을 넘긴 경우 0으로 되돌리는 방법은 부분합을 구해야하는 과정에서 계산이 복잡하게되어 기본배열을 뒤에 하나더 붙인 2배길이 배열을 만들어 해결하였습니다. 또한 부분합이 중복된 경우는 제외하고 구하므로 Set자료구조를 사용해 자동으로 중복을 제외시켜줍니다. 이후 범위가 1000인 비교적 작은 값이므로 .. 더보기
[프로그래머스] 귤 고르기 / 자바(Java) 문제 https://school.programmers.co.kr/learn/courses/30/lessons/138476 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해설 문제에서 귤의 크기와 상관없이 크기의 종류가 최소일 때 담으려는 귤의 수를 원하기 때문에 같은 크기인 귤의 수를 구하고 내림차순 정렬해주어 k개만큼 귤을 넣었을때 종류의 수를 return 으로 해결할 수 있는 문제입니다. tangerine의 원소의 범위가 길어 배열의 정렬은 시간초과가 날 수 있어 Map을 사용해 특정 크기의 귤 수를 구하고 해당 값으로 List를 만들어 정렬 후 fo.. 더보기
[프로그래머스] 롤케이크 자르기 / 자바(Java) 문제 https://school.programmers.co.kr/learn/courses/30/lessons/132265 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해설 롤케이크(입력 배열)을 2개로 나누어 앞, 뒤로 확인하는 문제라 정렬을 쓸 수 없기 때문에 앞에서부터 하나씩 따라가며 공평하게 잘렸는가 여부를 판단하며 진행해야 합니다. topping의 길이가 1,000,000이기 때문에 O(N^2)의 시간복잡도를 가지게 되면 시간초과가 발생해 더 적은 시간복잡도가 필요합니다. topping의 원소의 범위가 1~1000으로 너무 많지 않아 배열을 사용.. 더보기
[프로그래머스] 점 찍기 / 자바(Java) 문제 https://school.programmers.co.kr/learn/courses/30/lessons/140107 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해설 k와 d 모두 최대 1,000,000인 문제라 일일히 2차원 영역의 범위를 계산하면 시간초과가 발생합니다. 그래서 원의 반지름을 이용한 수식으로 답을 구합니다. 원점과의 거리가 d를 넘지 않는 위치에 점을 찍기 때문에 원점에서 d의 반지름을 가진 원 내부에 있는 x,y모두 k의 배수인 점을 구하는 문제가 됩니다. x의 좌표가 모두 k의 배수이기 때문에 특정 x좌표를 k*i라고 표현할 .. 더보기
[프로그래머스] 테이블 해시 함수 / 자바(Java) 문제 https://school.programmers.co.kr/learn/courses/30/lessons/147354 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해설 중요하게 볼 부분이 2개 있습니다. 2차원 배열의 조건이 여러개인 정렬 XOR 1. 2차원 배열의 조건이 여러개인 정렬 주어진 2차원 배열을 정렬하기 위해 Arrays.sort와 람다식, 삼항연산자를 이용하였습니다. Arrays.sort(data, (a,b)-> a[col-1]==b[col-1] ? b[0]-a[0] : a[col-1]-b[col-1] ); 이때 col은 1부터 시작하.. 더보기
[프로그래머스] 시소 짝꿍 / 자바(Java) 문제 https://school.programmers.co.kr/learn/courses/30/lessons/152996 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해설 weights의 길이가 딱 봐도 길어 일일히 비교한다면 약 100억번의 연산, O(n^2)이 필요해 시간복잡도를 고려해야하는 문제입니다. 일일히 비교하지 않고 쉽게 있던 값을 검색하는 방식으로 특정 무게를 키로 가지고 해당 무게를 가진 사람의 수를 값으로 가진 Map을 사용해야한다고 생각되었습니다. 또한 우리가 확인해야할 좌석은 3가지로 총 비교 횟수는 6가지에 추가로 같은 무게인 경.. 더보기
[프로그래머스] 마법의 엘리베이터 / 자바(Java) 문제 https://school.programmers.co.kr/learn/courses/30/lessons/148653 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해설 각 자리수에 있는 숫자들을 비교하되 각 숫자가 어떤지에 따라 올림이 발생하므로 가장 낮은 자리의 숫자부터 연산합니다. int under = storey - (storey/10)*10; storey/=10; int형 숫자에 10을 나누고 곱하면 int의 특성상 1자리수가 사라진 수로 다시 나오므로 해당 연산을 통해 under는 항상 1의 자리 숫자가 나옴을 알 수 있습니다. 이후 본래 .. 더보기
[프로그래머스] 숫자 변환하기 / 자바(Java) 문제 https://school.programmers.co.kr/learn/courses/30/lessons/154538# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해설 특정 자연수 x에서 y로 변환하는데 필요한 최소 연산 횟수를 구하는 문제입니다. bruteforce로 해결하려 한다면 각 연산요소 3가지(+n, *2, *3)을 매번 계산해 주어야 해서 x가 1이고 y가 1,000,000인 경우 3^1000000정도가 필요합니다. 하지만 DP를 사용하면 3*1000000정도로 깔끔한 풀이가 가능해 집니다. 목표는 최소 연산 횟수를 구하는 것이기 때문.. 더보기

728x90