[2단계] 2. 주식가격,삼각 달팽이,소수 찾기
7516 단어 프로그래머스 2단계프로그래머스 2단계
아래 모든 문제들은 프로그래머스에서 제공 되는 문제를 이용하였습니다, 감사합니다.
- 모두 풀었음
주식가격
문제 설명
초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.
제한사항
- prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
- prices의 길이는 2 이상 100,000 이하입니다.
입출력 예
초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.
풀이
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> prices) {
vector<int> answer;
int sum = 0;
for (int i = 0; i < prices.size(); i++)
{
sum = 0;
for (int j = i + 1; j < prices.size(); j++)
{
if (prices[i] <= prices[j])
{
sum++;
}
else
{
sum++;
break;
}
}
answer.push_back(sum);
}
return answer;
}
설명
- for구문 두개를 통해, 해결했다.
삼각 달팽이
문제 설명
정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.
제한사항
- n은 1 이상 1,000 이하입니다.
입출력 예
풀이
#include <string>
#include <vector>
#include <iostream>
using namespace std;
vector<int> solution(int n) {
vector<int> answer;
vector<vector<int>> tmp;
int count = 0;
for (int i = 0; i < n; i++)
{
answer.push_back(0);
answer[0] = i + 1;
tmp.push_back(answer);
}
for (int i = 0; i < n; i++)
{
tmp[n - 1][i] = n + i;
}
int x= n - 1;
int y = n - 1;
count = tmp[n - 1][n - 1];
for (int i = 0; i < n - 2; i++)
{
if (i % 3 == 0)
{
while (tmp[x - 1][y - 1] == 0)
{
x--;
y--;
tmp[x][y] = ++count;
}
}
else if(i % 3 == 1)
{
while(tmp[x + 1][y] == 0)
{
x++;
tmp[x][y] = ++count;
}
}
else if(i % 3 == 2)
{
while(tmp[x][y + 1] == 0)
{
y++;
tmp[x][y] = ++count;
}
}
}
answer.clear();
for(int i = 0; i < tmp.size(); i++)
{
for (int j = 0; j < tmp[i].size(); j++)
answer.push_back(tmp[i][j]);
}
return answer;
}
설명
- 해당 값들을 구하기 위해, 그림과 똑같은 배열을 만들어 주었다.
- 숫자가 1씩 증가하면서 네모칸을 채워나가는데, 일정한 규칙을 가지고 배열이 형성된다.
- 아래 방향으로, 오른쪽 방향으로 위 방향으로 3가지 방향이라 \%3을 했을떄 방향을 나타내는 값으로 생각할 수 있었다.
- 방향별로 인덱스 변화가 달라지기 떄문에 3개의 if문을 만들고 분리 시켜주었다.
소수 찾기
문제 설명
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.
각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.
제한사항
- numbers는 길이 1 이상 7 이하인 문자열입니다.
- numbers는 0~9까지 숫자만으로 이루어져 있습니다.
- "013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.
입출력 예
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.
각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.
풀이
#include <string>
#include <vector>
#include <set>
#include <iostream>
using namespace std;
set<int> save;
void swap(char &a, char &b)
{
char temp = a;
a = b;
b = temp;
}
void permutation(string data, int depth, int n, int r)
{
string st = "";
if (depth == r)
{
for(int i = 0; i < r; i++)
st += data[i];
save.insert(stoi(st));
return;
}
for (int i = depth; i < n; i++)
{
swap(data[depth], data[i]);
permutation(data, depth + 1, n , r);
swap(data[depth], data[i]);
}
}
int solution(string numbers) {
int answer = 0;
int flag = 0;
for (int i = 1; i <= numbers.size(); i++)
{
// permutation(numbers, 0, numbers.size(), i);
}
set<int>::iterator iter;
for(iter = save.begin(); iter != save.end(); iter++)
{
flag = 0;
for (int i = 2; i < (*iter); i++)
{
if ((*iter) % i == 0)
{
flag = 1;
break;
}
}
if (flag == 0 && *iter != 1 && *iter != 0)
{
answer += 1;
}
}
return answer;
}
설명
- 숫자들의 조합으로 나올수 있는 모든 경우의 숫자를 구해주었다.
- 그리고 set을 통해 중복되는 숫자들을 제거하고, 개수들으 카운터 해주었다.
Author And Source
이 문제에 관하여([2단계] 2. 주식가격,삼각 달팽이,소수 찾기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hey-chocopie/2단계-2.-주식가격삼각-달팽이소수-찾기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)