본문 바로가기

728x90

[IT] 코딩테스트

[프로그래머스] 무인도 여행 / 자바(Java) 문제 https://school.programmers.co.kr/learn/courses/30/lessons/154540 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해설 상하좌우로 연결된 같을 모두 더하고 떨어져있는 요소들을 오름차순으로 정렬하면되는 간단한 4방탐색와 완전탐색을 섞은 문제입니다. 3가지 코드들을 이용해 문제를 해결할 수 있습니다. 입력을 다루기 쉽게 2차원 배열로 생성(map) 4방탐색을 시작할 위치를 반복을 통해 선정 4방탐색과 BFS 리스트를 배열로 변환, 정렬 1번. 입력을 다루기 쉽게 2차원 배열로 생성 문제에서 주어진 maps.. 더보기
[프로그래머스] 호텔 대실 / 자바(Java) 문제 https://school.programmers.co.kr/learn/courses/30/lessons/155651# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해설 예약시간이 주어질 때 시간이 겹치지 않기 위한 최소한의 방의 개수를 구하는 문제이다. 만약 Bruteforce로 해결하려 한다면 배열 book_time의 길이가 1000이므로 1000!이 되어 연산이 불가능할 정도로 커진다. 따라서 그리디방식을 사용하여 문제를 풀기로 했다. (1)시작시간을 기준으로 정렬해주어 시간순서대로 방에 들어가도록 해주고, (2)새로운 시간이 들어올 때마다 끝.. 더보기
[프로그래머스] 로또의 최고 순위와 최저 순위 / 자바(Java) 문제 https://school.programmers.co.kr/learn/courses/30/lessons/77484#fn1 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해설 로또 번호를 맞추는, 두 배열간에 중복되는 숫자의 개수를 구하는 간단한 문제이지만 0으로 표시되는 지워진 숫자가 있어 생각할 거리가 있었습니다. 최저순위번호는 이 숫자들이 모두 틀렸을 때, 최고순위번호는 모두 맞았을 때 이므로 최저순위번호에 0의 개수를 더하면 최고순위번호의 맞춘 숫자의 수 임을 알 수 있습니다. 문제에 있는 예시 1번입니다. 당첨 번호 31 10 45 1 6 1.. 더보기
[프로그래머스] 없는 숫자 더하기 / 자바(Java) 문제 https://school.programmers.co.kr/learn/courses/30/lessons/86051 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해설 0~9까지의 숫자 중 numbers 배열에 포함되지 않는 숫자들의 합을 구해야 합니다. 배열을 따라가며 포함 여부를 구한 다음, 미포함된 숫자를 더하는 방법을 생각했지만 숫자가 중복되지 않는다는 조건이 있어 0~9의 총 합값(45)에서 포함된 숫자들을 빼는 형식으로 바꾸더라도 오류없고 더 빠른 속도로 연산할 수 있습니다. 코드 class Solution { public int solut.. 더보기
[프로그래머스] 최소직사각형 / 자바(Java) 문제 https://school.programmers.co.kr/learn/courses/30/lessons/86491 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해설 가장 작은 명함지갑을 만드는 문제입니다. 가로, 세로를 맞춰 계산해 본다면 2의 10000제곱의 반복횟수를 가지게 되어 시간이 너무 오래걸립니다. 그래서 가로, 세로가 아닌 각 명함을 긴 면(B), 짧은 면(S)으로 정리한다면 긴 면들이 한 쪽으로 모여 가장 작은 지갑을 만들 수 있게됩니다. sizes의 각 요소별 가로, 세로값을 Math.max, Max.min으로 긴 면, 짧은 면을 .. 더보기
[백준] 14501 퇴사 / 자바(Java) 문제 https://www.acmicpc.net/problem/14501 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net 해설 상담이 매일 잡혀있고, 앞의 상담 여부가 뒤의 상담가능 여부를 정하기 때문에 각 일자별 최대 금액을 구하는 dp를 이용하여 문제를 해결하였다. dp[i]를 해당 일자의 최대 금액이라 한다면 점화식을 이와 같이 세울 수 있다 dp[i + t[i]] = max(dp[i + t[i]] , dp[i] + p[i]) 현재 i에서 상담일(t[i])를 더한 날의 최대 금액에서 오늘 일을 한 경우와 본래 있던 경우 중 최대값을 현재 최대값으로 넣어준다. 이때 dp배열의 크기는 N을 벗어나지 않으므로 조건을 추가해준다 if( i + t[i.. 더보기
[프로그래머스] 개인정보 수집 유효기간 / 자바(Java) 문제 https://school.programmers.co.kr/learn/courses/30/lessons/150370# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해설 문제가 길어 복잡해보이지만 부분으로 끊어보면 간단한 문제입니다. 개인정보에 따라 얻은 수집 일자에 약관에 맞는 유효기간을 더해, 오늘 날짜와 비교하면 됩니다. 3단계로 분류하면 1. terms배열에서 약관종류에 따른 값을 찾기 쉽도록 Map자료구조에 넣습니다. 2. 각 개인정보 별로 최종 유효기간을 구해줍니다. 3. 최종 유효기간과 현재 날짜를 비교해 파기 여부를 확인합니다. 이때 .. 더보기
[프로그래머스] 숫자 짝궁 / 자바(Java) 문제 https://school.programmers.co.kr/learn/courses/30/lessons/131128 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해설 주어진 두 정수 X, Y에서 공통된 임의의 정수들을 이용해 가장 큰 수를 만드는 문제입니다. 각자 정수의 개수들만 구해주고 중복되는 정수를 9부터 0까지 역으로 나열하면 가장 큰 수를 만들어줄 수 있습니다. 1. X, Y에 각각 대응되는 배열 xarr, yarr를 만들어 각자 가지고있는 정수들의 개수를 구합니다. 2. StringBuilder를 사용해 9부터 0까지 역으로 나아가며 중.. 더보기

728x90