[2단계] 2. 주식가격,삼각 달팽이,소수 찾기

아래 모든 문제들은 프로그래머스에서 제공 되는 문제를 이용하였습니다, 감사합니다.

  • 모두 풀었음

주식가격

문제 설명

초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.

제한사항

  • prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
  • prices의 길이는 2 이상 100,000 이하입니다.

입출력 예

풀이

#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 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.

입출력 예

풀이

#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을 통해 중복되는 숫자들을 제거하고, 개수들으 카운터 해주었다.

좋은 웹페이지 즐겨찾기