programmers
-
프로그래머스 월간 코드 챌린지 시즌 1 두 개 뽑아서 더하기 Level 1 두 개 뽑아서 더하기 문제 정리 주어진 배열에서 서로 다른 인덱스의 두 수를 뽑는다. 더해서 만들 수 있는 모든 수를 오름차순으로 정렬하여 return 하라 문제 풀이 이중 for문을 돌면서 i와 j가 같지 않은 경우 set에 넣는다. (중복 제거를 위해 set에 넣음) set크기의 배열을 생성 iterator를 통해 set의 원소들을 모두 뽑아 배열에 넣는다. Arrays.sort()를 통해 오름차순으로 정렬한다. 프로그래머스 두 개 뽑아서 더하기 java 두 개 뽑아서 더하기 cpp 가능한 조합을 모두 vector에 넣고 sotring을 우선 진행한 다음에 unique 함수를 통해 연속된 수 중 중복된 수를 지웠습니다 이 외에..
[정렬] 프로그래머스 월간 코드 챌린지 시즌1 1번 :: 두 개 뽑아서 더하기 (cpp, java)프로그래머스 월간 코드 챌린지 시즌 1 두 개 뽑아서 더하기 Level 1 두 개 뽑아서 더하기 문제 정리 주어진 배열에서 서로 다른 인덱스의 두 수를 뽑는다. 더해서 만들 수 있는 모든 수를 오름차순으로 정렬하여 return 하라 문제 풀이 이중 for문을 돌면서 i와 j가 같지 않은 경우 set에 넣는다. (중복 제거를 위해 set에 넣음) set크기의 배열을 생성 iterator를 통해 set의 원소들을 모두 뽑아 배열에 넣는다. Arrays.sort()를 통해 오름차순으로 정렬한다. 프로그래머스 두 개 뽑아서 더하기 java 두 개 뽑아서 더하기 cpp 가능한 조합을 모두 vector에 넣고 sotring을 우선 진행한 다음에 unique 함수를 통해 연속된 수 중 중복된 수를 지웠습니다 이 외에..
2020.11.05 -
프로그래머스 행렬의 곱셈 c++ 풀이 Level 2 연습문제 행렬의 곱셈 문제 정리 2차원 행렬 arr1, arr2가 주어질때 두 행렬을 곱한 결과를 반환하는 함수를 작성하여라 행과 열의 길이는 2 이상 100 이하이다. (최대 100x100) 행렬의 원소는 -10 이상 20 이하의 자연수이다. 곱할 수 있는 배열만 주어진다. 문제 풀이 20^2 x 100 = 400 x 100 = 40000으로 int형으로 가능 이 문제는 단순히 행렬 곱셈의 개념만 알고 있다면 풀 수 있습니다. 2차원 벡터를 다루는 문제로 좋은 예제라고 생각합니다. (실제로 제가 그랬음) 왼쪽 행렬의 i행, 오른쪽 행려의 j열을 sumproduct 하면 새로운 행렬의 (i,j) 위치의 값이 됩니다. 예를들어 arr1의 1행, arr2의..
[수학, 2차원 벡터] 프로그래머스 level2 행렬의 곱셈 c++ 풀이프로그래머스 행렬의 곱셈 c++ 풀이 Level 2 연습문제 행렬의 곱셈 문제 정리 2차원 행렬 arr1, arr2가 주어질때 두 행렬을 곱한 결과를 반환하는 함수를 작성하여라 행과 열의 길이는 2 이상 100 이하이다. (최대 100x100) 행렬의 원소는 -10 이상 20 이하의 자연수이다. 곱할 수 있는 배열만 주어진다. 문제 풀이 20^2 x 100 = 400 x 100 = 40000으로 int형으로 가능 이 문제는 단순히 행렬 곱셈의 개념만 알고 있다면 풀 수 있습니다. 2차원 벡터를 다루는 문제로 좋은 예제라고 생각합니다. (실제로 제가 그랬음) 왼쪽 행렬의 i행, 오른쪽 행려의 j열을 sumproduct 하면 새로운 행렬의 (i,j) 위치의 값이 됩니다. 예를들어 arr1의 1행, arr2의..
2020.07.08 -
프로그래머스 피보나치 수 c++ 풀이 Level 2 연습문제 피보나치 수 문제 정리 n이 주어질 때 n번째 피보나치 수를 1234567로 나눈 나머지를 구하여라 n은 2이상 100000 이하이다. 문제 접근 피보나치 수를 알기 위해서는 이전의 2개의 수만 알면 된다. 그렇기 때문에 2개의 수만 관리한다. n이 최대 100,000이기 때문에 배열을 모두 만들면 낭비이다. 또한 계속 값을 더해나간 후 마지막에 모듈러 연산을 하면 값이 범위를 넘어 이상한 값이 나올 수 있다. 그렇기 때문에 모듈러 연산의 성질을 이용하면 간단히 풀 수 있다. 모듈러 연산의 성질 이 성질만 안다면 간단히 풀 수 있습니다. (a + b) % c = ((a % c) + (b % c)) % c 예를들어 (10 + 1) % 3 = (1..
[수학, 모듈러 성질] 프로그래머스 level2 피보나치 수 c++ 풀이프로그래머스 피보나치 수 c++ 풀이 Level 2 연습문제 피보나치 수 문제 정리 n이 주어질 때 n번째 피보나치 수를 1234567로 나눈 나머지를 구하여라 n은 2이상 100000 이하이다. 문제 접근 피보나치 수를 알기 위해서는 이전의 2개의 수만 알면 된다. 그렇기 때문에 2개의 수만 관리한다. n이 최대 100,000이기 때문에 배열을 모두 만들면 낭비이다. 또한 계속 값을 더해나간 후 마지막에 모듈러 연산을 하면 값이 범위를 넘어 이상한 값이 나올 수 있다. 그렇기 때문에 모듈러 연산의 성질을 이용하면 간단히 풀 수 있다. 모듈러 연산의 성질 이 성질만 안다면 간단히 풀 수 있습니다. (a + b) % c = ((a % c) + (b % c)) % c 예를들어 (10 + 1) % 3 = (1..
2020.07.07 -
프로그래머스 땅따먹기 c++ 풀이 Level 2 연습문제 땅따먹기 문제 정리 땅따먹기의 땅은 총 N행 4열 모든 칸에는 점수가 있다. 1행부터 땅을 밟으며 한 행씩 내려오며, 각 행의 4칸 중 한 칸만 밟으면서 내려와야 한다. 단, 한 행씩 내려올 떄, 같은 열을 연속해서 밟을 수 없다. 마지막 행 까지 내려왔을 때, 얻을 수 있는 점수의 최대값으 구하여라. 문제 접근 DP??? 백준의 진우의 달 여행(Large) 문제와 비슷한 방식이라고 생각했습니다. 우선 dfs로 풀어보았습니다. 효율성 테스트도 있어서 시간초과 발생!!! 그래서 이번에는 풀이를 머릿속에 넣고 dp로 접근했습니다. 풀이가 잘 기억이 나지 않아 달 여행 문제 풀이를 보고 손으로 정리해보았습니다. 3차원 배열을 만들어서 [이전 col][현..
[DP] 프로그래머스 level2 땅따먹기 c++ 풀이프로그래머스 땅따먹기 c++ 풀이 Level 2 연습문제 땅따먹기 문제 정리 땅따먹기의 땅은 총 N행 4열 모든 칸에는 점수가 있다. 1행부터 땅을 밟으며 한 행씩 내려오며, 각 행의 4칸 중 한 칸만 밟으면서 내려와야 한다. 단, 한 행씩 내려올 떄, 같은 열을 연속해서 밟을 수 없다. 마지막 행 까지 내려왔을 때, 얻을 수 있는 점수의 최대값으 구하여라. 문제 접근 DP??? 백준의 진우의 달 여행(Large) 문제와 비슷한 방식이라고 생각했습니다. 우선 dfs로 풀어보았습니다. 효율성 테스트도 있어서 시간초과 발생!!! 그래서 이번에는 풀이를 머릿속에 넣고 dp로 접근했습니다. 풀이가 잘 기억이 나지 않아 달 여행 문제 풀이를 보고 손으로 정리해보았습니다. 3차원 배열을 만들어서 [이전 col][현..
2020.07.04 -
프로그래머스 다음 큰 숫자 c++ 풀이 Level 2 연습문제 다음 큰 숫자 문제 정리 자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음고 같다. ``` n의 다음 큰 숫자는 n보다 큰 자연수 n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 개수가 같다. n의 다음 큰 숫자는 조건 1,2를 만족하는 수 중 가장 작은 수 n은 1,000,000 이하의 자연수이다. 문제 풀이 n보다 큰 숫자부터 2진수로 변환하여 1의 개수를 세본다. 개수를 세서 n의 1의 개수와 같다면 조건 1을 만족하고, 자동으로 조건 2도 만족하게 된다. 1의 개수는 이진수로 변환하는 로을 그대로 적용하면 된다. 2로 나눠서 2로 나눠 떨어지지 않는다면 1이 하나 있다는 뜻이다. 이를 n이 2나 1이 될때까지 반복한다. 마지막..
[2진수 변환] 프로그래머스 level2 다음 큰 숫자 c++ 풀이프로그래머스 다음 큰 숫자 c++ 풀이 Level 2 연습문제 다음 큰 숫자 문제 정리 자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음고 같다. ``` n의 다음 큰 숫자는 n보다 큰 자연수 n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 개수가 같다. n의 다음 큰 숫자는 조건 1,2를 만족하는 수 중 가장 작은 수 n은 1,000,000 이하의 자연수이다. 문제 풀이 n보다 큰 숫자부터 2진수로 변환하여 1의 개수를 세본다. 개수를 세서 n의 1의 개수와 같다면 조건 1을 만족하고, 자동으로 조건 2도 만족하게 된다. 1의 개수는 이진수로 변환하는 로을 그대로 적용하면 된다. 2로 나눠서 2로 나눠 떨어지지 않는다면 1이 하나 있다는 뜻이다. 이를 n이 2나 1이 될때까지 반복한다. 마지막..
2020.07.03 -
프로그래머스 이중우선순위 큐 자바 풀이 Level 3 해시(Hash) 이중우선순위큐 문제 정리 이중 우선순위 큐는 다음 연산을 할 수 있는 자료구조 이다. 1.1 I 숫자 : 큐에 주어진 숫자를 삽입한다 1.2 D 1 : 큐에서 최댓값을 삭제한다. 1.3 D -1 : 큐에서 최솟값을 삭제한다. 모든 연산을 처리한 후 큐가 비어있으면 [0,0] 비어있지 않으면 [최대값, 최솟값]을 반환하여라. 최대/최소를 삭제하는 연산에서 최대/최소값이 둘 이상인 경우, 하나만 삭제한다. 빈 큐에 데이터를 삭제하라는 연산이 주어질 경우, 해당 연산은 무시합니다. 문제 접근 우선순위 큐는 deque 처럼 뒤에서 뺄 수 없습니다. 그래서 오름차순, 내림차순 우선순위 큐를 따로 두어 최대, 최소를 구해야겠다고 생각했습니다. 오..
[우선순위 큐] 프로그래머스 level3 이중우선순위큐 자바 풀이프로그래머스 이중우선순위 큐 자바 풀이 Level 3 해시(Hash) 이중우선순위큐 문제 정리 이중 우선순위 큐는 다음 연산을 할 수 있는 자료구조 이다. 1.1 I 숫자 : 큐에 주어진 숫자를 삽입한다 1.2 D 1 : 큐에서 최댓값을 삭제한다. 1.3 D -1 : 큐에서 최솟값을 삭제한다. 모든 연산을 처리한 후 큐가 비어있으면 [0,0] 비어있지 않으면 [최대값, 최솟값]을 반환하여라. 최대/최소를 삭제하는 연산에서 최대/최소값이 둘 이상인 경우, 하나만 삭제한다. 빈 큐에 데이터를 삭제하라는 연산이 주어질 경우, 해당 연산은 무시합니다. 문제 접근 우선순위 큐는 deque 처럼 뒤에서 뺄 수 없습니다. 그래서 오름차순, 내림차순 우선순위 큐를 따로 두어 최대, 최소를 구해야겠다고 생각했습니다. 오..
2020.05.28