Lv2(51)
-
[Programmers] Lv2. 숫자 블록 | C++
🔗문제 보러가기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 👨💻풀이 과정 n번째 블록에 놓여질 숫자는 n이 소수일 경우엔 1, 아닐 경우에는 10,000,000보다 작은 제일 큰 약수입니다. 제곱근 방식을 이용하여 약수와 소수를 찾는 데에 시간을 효율적으로 절약할 수 있습니다. 현재 점검하려는 숫자를 i라고 한다면, n / i \( \leq 10,000,000 \) 이라면, n / i가 가장 큰 약수가 됩니다. 가장 큰 약수를 찾았으므로 반복문을 종료합니다. 아니라면, i를 선택한 후에 다음 루프로 넘어가도록 합니다. n이 1인 경우에는 0이 적힌 ..
2023.07.04 -
[Programmers] Lv2. 두 원 사이의 정수 쌍 | C++
🔗문제 보러가기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 👨💻풀이 과정 원은 상하좌우 대칭이므로, 4개의 사분면 중 하나에 속한 점들 개수만 구해서 4배 후, 겹치는 점 개수들만 빼주면 되겠다고 생각하였습니다. 저는 2사분면을 선택하여 진행하였습니다. 아래 과정은 제 2사분면 내에 점들 개수를 구한다는 가정 하에 진행한 과정들입니다. 우리는 정수 부분만 택해야 하므로, 큰 원의 y값은 내림, 작은 원의 y값은 올림 처리를 해야 합니다. [a, b] 구간의 자연수 개수를 구하는 공식은 b - a + 1입니다. (a ≤ b) 큰 원을 r1, 작은 원을..
2023.07.03 -
[Programmers] Lv2. 우박수열 정적분 | C++
🔗문제 보러가기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 👨💻풀이 과정 다음 문제 지문 부분이 무슨 말인지 헷갈려, 이해하는 데에 시간이 좀 걸렸습니다. "단, 우박수열 그래프의 가로축 길이를 미리 알 수 없기 때문에 구간의 시작은 음이 아닌 정수, 구간의 끝은 양이 아닌 정수로 표현합니다. 이는 각각 꺾은선 그래프가 시작하는 점과 끝나는 점의 x좌표에 대한 상대적인 오프셋을 의미합니다." 구한 우박수열의 마지막 좌표(위 예제로 보면 (5, 1))의 x값을 LX라고 한다면, 주어진 구간 [a, b]는 [0 + a, LX + b]를 의미하는 거였습니..
2023.07.01 -
[Programmers] Lv2. 디펜스 게임 | C++
🔗문제 보러가기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 👨💻풀이 과정 처음에는 DP로 무적권 스킬을 사용했을 경우와 안 했을 경우의 데이터들을 저장하여 풀어나가려고 했는데, 무적권 스킬 개수(k)와 병사들 수(n)가 같은 게 아니라서 그렇게 할 수가 없더라구요. 그래서 스택(Stack)을 이용해서 큰 숫자를 무적권 스킬로 스킵하는 형식으로 코드를 작성했었는데, 이것 역시 최적이라는 보장이 없었습니다. 방법은 우선순위 큐(Priority Queue, heap)였네요. 왜 이 생각을 못 했을까요. 방법은 간단합니다. 현재 병사 수(n)가 현재 라운드..
2023.07.01 -
[Programmers] Lv2. 테이블 해시 함수 | C++
🔗문제 보러가기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 👨💻풀이 과정 단순 구현 문제입니다. 별 거 없습니다. 진짜 문제에서 제시한 순서대로 구현하기만 하면 돼요... 아래 코드 첨부하겠습니다! ✏️소스 코드 및 결과 #include #include using namespace std; int column; bool Compare(const vector& tuple1, const vector& tuple2) { if (tuple1[column - 1] == tuple2[column - 1]) return tuple1[0] > tuple2[0]; ..
2023.07.01 -
[Programmers] Lv2. 행렬 테두리 회전하기 | C++
🔗문제 보러가기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 👨💻풀이 과정 행렬 크기가 최대 \( 10000 \times 10000 \)이라서 시간 초과가 나지 않을까 걱정했는데, 다행히 통과했습니다. 문제 자체는 어렵지 않네요. 그냥 문제에서 말하는대로 구현하기만 하면 됩니다. 근데, 익숙치가 않아서 시간이 좀 오래 걸렸네요. rows \( \times \) columns 크기의 2차원 배열 만들고, 값 초기화하기 주어진 query에 대해 테두리 회전하기 저는 값을 스왑하는 방식으로 진행했습니다. 시계 방향 회전이니, 위 \( \rightarrow ..
2023.06.28