반응형 Language252 프로그래머스 N개의 최소공배수(Java) 사이트명 : 프로그래머스(Programmers) 문제명 : N개의 최소공배수 언어 : 자바(Java) 여러 숫자를 배열로 받은 뒤 이 숫자의 최소공배수를 찾는 문젠데 그냥 정직하게 찾으면 효율성에 걸린다 그래서 유클리드 호제법을 사용해야 하는데 유클리드 호제법이란? 두 수를 곱한 뒤 이 수들의 최대공약수로 나눠보면 최소공배수를 구할 수 있다 내 풀이방법은 아래와 같은데 먼저 큰 수를 찾은 뒤 큰 수에서 1씩 줄여보면서 최대공약수를 찾는다 이후 배열의 두 수를 곱해서 최대공약수로 나누는 유클리드 호제법을 진행하면서 다음 배열에는 두 수의 최소공배수를 넣는다 유클리드 호제법으로 돌리고 돌려서 각 수들의 최소공배수를 계속 구하면 결국 배열에 주어진 값들의 최소공배수를 구할 수 있다 다른 방법으로도 풀 수는 있.. 2019. 9. 29. 프로그래머스 폰켓몬(Java) 사이트명 : 프로그래머스(Programmers) 문제명 : 폰켓몬 언어 : 자바(Java) int nums 배열을 받는데 여기서 다른 값을 최대 몇 종류까지 가져올 수 있냐는 얘기다 종류의 한계는 nums.length / 2를 해주면 간단히 가져올 수 있다 내 풀이방법은 아래와 같은데 먼저 set에 nums 배열을 다 담아주는데 set은 중복을 허용하지 않기 때문에 동일한 값을 넣을 경우 하나만 들어간다 즉 최대 종류를 파악하는 문제기 때문에 중복 값은 필요가 없다는 얘기다 이후 set.size가 nums.length를 절반으로 나눈 값보다 크다면 절반만 반환할 수 있으므로 nums.length / 2를 반환하고 그렇지 않을 경우 모두 반환이 가능하므로 answer를 set.size로 한 뒤 반환하면 된.. 2019. 9. 29. 자바에서 문자열 비교 시 == 가 아닌 equals를 써야하는 이유 자바를 처음 사용하다보면 대부분이 처음에 겪는 상황인데 문자열을 비교할 때 .equals가 아닌 ==를 쓰다가 위기에 처하게 된다 보면 String a와 b가 분명 동일하게 A를 줬음에도 a와 b가 같냐고 물어보면 다르다고 한다 A가 아니라 B라도 썼다는 말인가? 대체 원인을 몰라 삽질을 하다가 물어보면 java에서는 문자열을 비교할 때 ==가 아니라 equals를 쓰라고 하는데 궁금한 것은 왜 ==는 안되고 equals는 되냐는 거다 그리고 이 예제에서는 둘다 A를 주고 A와 B가 같냐? 라고 비교해 보니 같다고 하는데 이건 뭐지? 자바 버그인가? 이제부터 왜 ==가 아니라 equals를 써야하는지 알아보자 System.identityHashCode(변수명); 을 통해 작성한 변수가 실제 메모리 내 어.. 2019. 9. 25. 프로그래머스 예산(Java) 사이트명 : 프로그래머스(Programmers) 문제명 : 예산 언어 : 자바(Java) 문제를 잘못 이해해서 한참 고민했는데 막상 보니까 문제 설명에 비해 핵심이 단순했다 예산 안의 범위에서 최대 몇개의 부서(d)를 지원해 줄 수 있냐는 문제였는데 budget을 반드시 다 써야된다는 게 아니라 budget 안에서 최대 몇개의 d 배열의 값을 소모할 수 있냐는 말이다 내 풀이방법은 아래와 같은데 먼저 배열을 오름차순으로 정렬시켜 주는데 이러면 작은 값이 앞에, 큰 값이 뒤에 위치하게 된다 for문을 돌리면서 answer에 배열 값을 계속 더해주는데 여기서 answer의 값이 budget보다 커지게 된다면 for문을 돌린 횟수를 넣고 반환한다 for문이 끝나도록 budget의 값을 넘기지 않았다면 돌린 횟.. 2019. 9. 24. 프로그래머스 x만큼 간격이 있는 n개의 숫자(Java) 사이트명 : 프로그래머스(Programmers) 문제명 : x만큼 간격이 있는 n개의 숫자 언어 : 자바(Java) x와 n을 받아서 x를 1부터 n까지 곱한 값을 배열에 쫙 넣으면 되는 문제인데 보면 간단해 보이겠지만 아마 문제 풀다가 마지막 2개의 테스트에서 막히는 경우가 좀 있을텐데 내 풀이방법은 아래와 같다 보면 그냥 n의 크기로 배열을 만든 뒤 x를 1부터 곱해가면서 answer 배열에 착착 넣어주면 될 것 같은데 마지막 두 테스트에서 틀리는 이유가 값을 long 처리해서 넣어주지 않아서 그런 경우가 많을텐데 왜 마지막 두 테스트에서 틀리냐면 int 값의 범위를 넘어서는 경우에 처리를 못해줘서 틀려서 그렇다 여기서 long으로 처리를 해 주면 범위를 넘어서는 경우가 나오지 않고 해결 가능하다 마.. 2019. 9. 24. 프로그래머스 행렬의 덧셈(Java) 사이트명 : 프로그래머스(Programmers) 문제명 : 행렬의 덧셈 언어 : 자바(Java) 행렬의 덧셈 문제는 2차원 배열 두개를 받아서 배열의 동일한 행과 열끼리 더한 값을 반환하라는 것이다 두 배열의 행과 열은 항상 같기 때문에 더할 방법만 생각해내면 된다 내 풀이방법은 아래와 같은데 for 문을 두번 돌리는데 for 문 하나는 행, for 문 하나는 열 개념이다 두 배열의 행[0]열[0] 행[0]열[1] 을 더하고 행이 올라가야 하는 만큼 열을 증가시킬 때 answer 배열에 답을 넣어주는 것이다 이후 배열의 크기에 맞춰 반복문을 쭉 돌려주면 끝이 난다 마지막으로 프로그래머스에 바로 적용 가능한 코드는 아래와 같다 class Solution { public int[][] solution(int.. 2019. 9. 24. 이전 1 ··· 34 35 36 37 38 39 40 ··· 42 다음 반응형