본문 바로가기

전체 글657

[Programmers] 로또의 최고 순위와 최저 순위 문제 : https://programmers.co.kr/learn/courses/30/lessons/77484 lottos 문자열에서 0인 개수를 wrongCnt 변수에 저장하고 0이 아닌 수들 중 로또번호에 포함되는 수의 개수를 matchCnt 변수에 저장한다. 최고등수가 되는 경우는 알수없는 번호(0인 수들)들이 모두 로또 당첨번호인 경우이다. 즉, matchCnt + wrongCnt 가 당첨번호의 개수인 등수를 구하면 된다. 최저등수가 되는 경우는 알수없는 번호들이 모두 로또 당첨번호가 아닌 경우이다. 즉, matchCnt가 당첨번호의 개수인 등수를 구하면 된다. 소스코드 : https://github.com/fpdjsns/Algorithm/blob/master/programmers/Dev-matc.. 2021. 5. 31.
[210531] 요즘은 근무하고 그림그리고 가끔 운동.. 다시 블로그 개발관련 포스팅 비율좀 높여야겠다. 빨리자고 빨리일어나서 생활패턴을 먼저 되돌려야겠다. 2021. 5. 31.
[programmers][월간 코드 챌린지 시즌2] 2개 이하로 다른 비트 문제 : https://programmers.co.kr/learn/courses/30/lessons/77885 xxxx0 -> xxxx1 만약 마지막 비트가 위와 같이 0 이라면 마지막 비트만 1로 바꾸면 정답을 구할 수 있다. 마지막 비트가 0인경우는 짝수인 수이므로 numbers[i]가 짝수인 경우 + 1이 정답이된다. 문제는 마지막 비트가 1인 홀수인 경우이다. 1000111 를 예로 들어보자. 홀수인경우는 0인 비트 중 최하위 비트를 찾는다. 위 경우엔 8에 해당하는 오른쪽에서 4번째 비트가 이에 속한다. 정답이 되는 비트는 1001011 이다. 즉, 0인 비트중 최하위비트는 1로 바꾸고 그 다음 비트는 0으로 바꿔주면 정답을 구할 수 있다. numbers[i]보다는 커야하고(조건 1) 최대 2개.. 2021. 5. 15.
[programmers][월간 코드 챌린지 시즌2] 약수의 개수와 덧셈 문제 : https://programmers.co.kr/learn/courses/30/lessons/77884 left, right가 최대 1000개므로 그냥 1부터 right까지 수들을 탐색하면서 탐색 중인 수가 left ~ right 의 약수인지 2중 for문을 돌려가며 판단한다. 약수의 수를 저장해야 하므로 right-left+1 크기의 배열도 필요하다. 탐색이 모두 끝나면 left~right들의 약수 개수가 짝수면 더하고 홀수면 뺀 결과를 반환한다. 시간복잡도는 O(right * (right-left+1)). 더 좋은 방법이 있을거 같아서 고민하다가 공식 풀이에 들어가서 지니어스한 방법을 알게되었다. 중요 아이디어는 약수가 홀수개란 뜻은 25와 같이 제곱수라는 뜻이다. 따라서 left ~ righ.. 2021. 5. 15.
[Leetcode][583] Delete Operation for Two Strings 문제 : leetcode.com/problems/delete-operation-for-two-strings/ 문자열 word1, word2 가 주어질 때, 두 문자열을 같게 만들게하기 위해 최소 몇 개의 문자를 삭제해야하는지 구해라. 최장공통부분수열(LCS; Longest Common Subsequence)로 풀었다. word1, word2 문자열의 문자들을 모두 탐색하면서 dp[i][j] (word1[0~i-1], word2[0~j-1]의 최장 공통부분수열 길이)를 세팅한다. for(int i=1; i 2021. 5. 8.
[Leetcode][665] Non-decreasing Array 문제 : leetcode.com/problems/non-decreasing-array/ 정수형 배열이 주어질 때 최대 한 개의 요소를 수정하여 감소하지 않는 배열을 만들 수 있는지를 구하라. 만들고자 하는 배열은 증가하는 배열이 아닌, 감소하지 않는 배열이므로 증가하는 수를 찾아 바로 앞이나 뒤에 있는 요소와 같은 수로 변경시킨다. (기본 아이디어) 앞에서부터 배열을 탐색하면서 탐색 중인 인덱스가 i일 때, nums[i] > nums[i+1] (감소하는 구간)인 경우 i를 변수를 만들어 저장해둔다. (let, ind). 만일 ind 변수가 2번 이상 세팅되려고 할 땐 두 개의 요소를 수정해야 하므로 감소하지 않는 배열을 만들 수 없다. 모든 배열을 탐색했을 때, ind 변수가 세팅된적이 없거나 (모든 요.. 2021. 5. 8.