본문 바로가기
반응형

Language/알고리즘 문제풀이37

프로그래머스 순열 검사 자바 문제풀이 프로그래머스 순열 검사 다음 문제는 int 배열을 받아 1부터 배열의 길이에 해당하는 숫자가 모두 들어있을 경우에는 true 그렇지 않거나 중복 값이 들어있을 경우에는 false를 반환하면 되는 문제인데 풀이방법은 아래와 같다 먼저 배열의 크기와 배열에 들어있는 값으로 true / false를 반환해주면 되기 때문에 배열을 오름차순으로 정렬시킨 뒤 for 문을 돌려보면 arr[0] > 1 arr[1] > 2 이런 식으로 값이 나오게 될텐데 배열은 0부터 시작하고 배열 안의 값은 1부터 시작하기 때문에 배열의 각 값과 i + 1이 같을 경우에는 패스 아닐 경우에는 배열에 중복 값이 들어있거나 혹은 배열에 잘못된 값이 들어있기 때문에 바로 false를 리턴시켜주면 된다 예제에 사용한 코드는 아래와 같다 im.. 2021. 11. 17.
프로그래머스 전화번호 목록 자바 문제풀이 프로그래머스 전화번호 목록 위 문제는 String 배열인 phone_book을 주는데 배열 중 하나의 인덱스가 다른 인덱스의 접두어인 경우에는 false를 반환하고 그 외에는 true를 반환한다 여기서 접두어가 뭔 말이냐면 119 / 97674223 / 1195524421 가 있을 때 1195524421 앞에 119가 있는 것이 보이는데 배열 안에 119가 존재하기 때문에 한 번호가 다른 번호의 접두어라고 보고 false를 반환하면 된다 유의할 점은 대량의 데이터를 가지고 조회를 수행할 경우 startsWith / equals 등은 속도가 느리기 때문에(효율성에서 걸림) 해시를 이용한 방법으로 문제를 풀어줘야 한다 문제풀이는 HashSet 안에 배열 데이터를 담아준 뒤 for 문을 두번 돌리는 것으로 깔.. 2021. 10. 29.
프로그래머스 완주하지 못한 선수 자바 문제풀이 코딩테스트 연습 - 완주하지 못한 선수 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수 programmers.co.kr 프로그래머스 완주하지 못한 선수 위 문제는 String 배열 participant / completion 을 제공받게 되는데 completion 배열은 participant 배열보다 size가 1 작기 때문에 participant 배열에서 completion 배열을 모두 빼준 뒤 남는 하나의 key 값을 반환하면 된다 문제를 푸는 방법은 다양하겠지만 시간제한이 존재하기 때문에 해시(Hash)를 사용해서 문제를 풀어줘야 한다 정답은 아래와 같은.. 2021. 10. 28.
프로그래머스 피보나치 수(Java) 사이트명 : 프로그래머스(Programmers) 문제명 : 피보나치 수 언어 : 자바(Java) 일단 피보나치 수를 풀기에 앞서서 문제 개념을 좀 알고 넘어가야 하는데 n은 항상 2 이상으로 들어오며 F(0) -> 0 F(1) -> 1 고정이다 F(2) -> F(0) + F(1) = 0 + 1 F(3) -> F(1) + F(2) = 1 + 1 .... 이런 식으로 이어진다 n 값이 10이라면 F(8) + F(9)를 해서 주면 되는 것이다 여기에 함정이 문제 설명을 이상하게 해놔서 정답을 제대로 뽑아내려면 만약 n이 10일 경우 (F(8) % 1234567) + (F(9) % 1234567) F(n) 값도 % 1234567을 해서 return 시켜야 한다 내 풀이방법은 아래와 같은데 일단 F(n)을 구하려.. 2019. 10. 16.
프로그래머스 짝지어 제거하기(Java) 사이트명 : 프로그래머스(Programmers) 문제명 : 짝지어 제거하기 언어 : 자바(Java) 같은 알파벳이 두개가 붙어있다면 두 알파벳을 제거하는데 모든 알파벳을 제거 가능하다면 1 모두 제거를 못했으면 0을 반환하는 문제다 내 풀이방법은 아래와 같은데 Stack을 사용해서 문제를 풀어줬다 먼저 스택은 LIFO(Last In First Out) 방식으로 값을 처리하게 되는데 한글자씩 잘라서 스택에 넣어주다가 넣어준 글자와 다음 글자를 비교해서 같으면 스택에 들어간 글자를 pop으로 지우고 아니면 스택에 push로 쌓아주고 이런 식으로 진행이 가능하다 for 문을 돌려 String을 글자 하나씩 잘라 넣어주면서 스택에 아무 값이 없거나, 현재 글자와 다음 글자가 다르다면 스택에 push로 넣어주고 .. 2019. 10. 16.
프로그래머스 N개의 최소공배수(Java) 사이트명 : 프로그래머스(Programmers) 문제명 : N개의 최소공배수 언어 : 자바(Java) 여러 숫자를 배열로 받은 뒤 이 숫자의 최소공배수를 찾는 문젠데 그냥 정직하게 찾으면 효율성에 걸린다 그래서 유클리드 호제법을 사용해야 하는데 유클리드 호제법이란? 두 수를 곱한 뒤 이 수들의 최대공약수로 나눠보면 최소공배수를 구할 수 있다 내 풀이방법은 아래와 같은데 먼저 큰 수를 찾은 뒤 큰 수에서 1씩 줄여보면서 최대공약수를 찾는다 이후 배열의 두 수를 곱해서 최대공약수로 나누는 유클리드 호제법을 진행하면서 다음 배열에는 두 수의 최소공배수를 넣는다 유클리드 호제법으로 돌리고 돌려서 각 수들의 최소공배수를 계속 구하면 결국 배열에 주어진 값들의 최소공배수를 구할 수 있다 다른 방법으로도 풀 수는 있.. 2019. 9. 29.

반응형