레이블이 알고리즘인 게시물을 표시합니다. 모든 게시물 표시
레이블이 알고리즘인 게시물을 표시합니다. 모든 게시물 표시

2020년 1월 19일 일요일

[매일프로그래밍] 정수 배열이 주어졌을 때, 배열의 원소의 값을 자신을 제외한 다른 원소들의 곱으로 변경하시오.

[매일프로그래밍 ]
코딩테스트 01/19/2020


# 하기 문제의 저작권은 매일프로그래밍 측에 있습니다.

안녕하세요, 매일프로그래밍 이번주 문제입니다.
정수 배열이 주어졌을 때, 배열의 원소의 값을 자신을 제외한 다른 원소들의 곱으로 변경하시오.

단, 나누기 연산은 수행하지 않습니다.

Input: [1, 2, 3, 4, 5]
Output: [120, 60, 40, 30, 24]

Input: [5, 3, 4, 2, 6, 8]
Output: [1152, 1920, 1440, 2880, 960, 720]


풀이 [ 파이썬 ]


2018년 8월 5일 일요일

STL 사용법 : Vector 2차원 설정, 반복자 Iterator 사용법

먼저 Vector와 Iterator 를 사용하는 방법은 하기와 같다.

#if 1
#include <iostream>
#include <vector>
using namespace std;

int main(void){
vector <int> viTest(5, 0); // vector 5개 공간 선언 및 0으로 초기화 진행.


vector<int>::iterator viIter = viTest.begin();

for (viIter; viIter != viTest.end(); viIter++){
cout << *viIter << endl;
}



}
#endif

실행결과 :
0
0
0
0
0


Vector의 2차원 설정방법은 하기와 같다.

#if 0
#include <iostream>
#include <vector>
using namespace std;

int main(void){
//      vector<vector <int> > vi;  // 이런식으로 해도되지만
// 안쪽 괄호의 경우 >>형태로 입력되면 연산자로 인식이 되는 경우 && 가독성이 떨어지므로, 띄어쓰기를 쓰는것이 좋다.

vector < vector<int> > m_vi(5, vector <int>(5,0)); //이렇게 선언과 동시에 초기화를 진행하는 것을 추천한다.
// 위의 코드는 m_vi[5][5] = {0,}; 과 같은 코드이다.

int n, m = 0;
cin >> n >> m;

vector < vector<int> > inputArrayTest(n, vector<int>(m, 0)); // 이 코드는 inputArrayTest[n][m] = {0,} 과 같은 코드이다.

for (int a = 0; a < n; a++)
{
for (int b = 0; b < m; b++)
{
cin >> inputArrayTest[a][b];
}
}
// 위와 같은 방법으로 접근이 가능하다.

for (int a = 0; a < n; a++){
for (int b = 0; b < m; b++){
cout << inputArrayTest[a][b] << " ";
}
cout << endl;
}
}

#endif

2018년 7월 5일 목요일

SW Expert 1217. [S/W 문제해결 기본] 4일차 - 거듭 제곱 D3

※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.

다음과 같이 두 개의 숫자 N, M이 주어질 때, N의 M 거듭제곱 값을 구하는 프로그램을 재귀호출을 이용하여 구현해 보아라.

2 5 = 2 X 2 X 2 X 2 X 2 = 32

3 6 = 3 X 3 X 3 X 3 X 3 X 3 = 729

[제약 사항]

총 10개의 테스트 케이스가 주어진다.

결과 값은 Integer 범위를 넘어가지 않는다.

[입력]

각 테스트 케이스의 첫 줄에는 테스트 케이스의 번호가 주어지고 그 다음 줄에는 두 개의 숫자가 주어진다.

[출력]

#부호와 함께 테스트 케이스의 번호를 출력하고, 공백 문자 후 테스트 케이스에 대한 답을 출력한다.

입력
1
9 8
2
2 8
........

출력
#1 43046721
#2 256
.......



SW Expert Academy 3431. 준환이의 운동관리

※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.

최근 경도비만 판정을 받은 준환이는 적절한 몸을 유지하기 위하여 1주일에 L분 이상 U분 이하의 운동을 하여야 한다.

준환이는 이번 주에 X분만큼 운동을 하였다.

당신은 준환이가 제한되어 있는 시간을 넘은 운동을 한 것인지, 그것이 아니라면 몇 분 더 운동을 해야 제한을 맞출 수 있는지 출력하는 프로그램을 작성해야 한다.


[입력]

첫 번째 줄에 테스트 케이스의 수 T가 주어진다.

각 테스트 케이스의 첫 번째 줄에는 세 정수 L, U, X(0≤ L ≤ U ≤ 107, 0 ≤ X ≤ 107)가 공백으로 구분되어 주어진다.


[출력]

각 테스트 케이스마다 I가 필요한 양보다 더 많은 운동을 하고 있다면 -1을 출력하고, 아니라면 추가로 몇 분을 더 운동해야 하는지 출력한다.
 
------------------

D3 레벨에 맞지않는 문제이지 않았나 싶다. 


SW Expert Academy 2063. 중간값 찾기

2063. 중간값 찾기

중간값은 통계 집단의 수치를 크기 순으로 배열 했을 때 전체의 중앙에 위치하는 수치를 뜻한다.

입력으로 N 개의 점수가 주어졌을 때, 중간값을 출력하라.


[예제]

N이 9 이고, 9개의 점수가 아래와 같이 주어질 경우,

85 72 38 80 69 65 68 96 22

69이 중간값이 된다.


[제약 사항]

1. N은 항상 홀수로 주어진다.

2. N은 9이상 199 이하의 정수이다. (9 ≤ N ≤ 199)


[입력]

입력은 첫 줄에 N 이 주어진다.

둘째 줄에 N 개의 점수가 주어진다.


[출력]

N 개의 점수들 중, 중간값에 해당하는 점수를 정답으로 출력한다.
 



삼성 SW Expert Academy 1284 수도요금 경쟁


입력2
9 100 20 3 10
8 300 100 10 250

 
출력
#1 90
#2 1800

2018년 7월 1일 일요일

매일프로그래밍 - 실리콘밸리 패키지 문제 13


 풀이

 :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>

using namespace std;

int main(void){
    int find_num = 0;
    char Array_num[10] = {0,};
    int *SaveArray = new int[10];

    /*
       Enter Key를 받을때까지 '숫자'형태의 문자열을 받아서 저장.
     */
    printf("Input : ");
    scanf("%[^\n]", Array_num);


    /*
       문자열을 콤마 기준으로 자를것.
       */
    char *parse = strtok(Array_num, ",");
    int cnt = 0;
    while(parse){
        SaveArray[cnt++] = atoi(parse); // askii to integer를 통해 파싱된 문자를 저장함.
        parse = strtok(NULL, ",");
    }


    // Reverse Sort이용. 내림차순
    sort(SaveArray, SaveArray+cnt, greater<int>());
    scanf("%d", &find_num);
    cout << "OutPut : " << SaveArray[find_num-1] << endl;

}

2018년 6월 24일 일요일

매일프로그래밍 - 실리콘밸리 패키지 문제 12.


////////////////////////////////////////////
// 매일 프로그래밍 12주차.
// Author : RaviKim
// Copyright @ dev@mailprogramming.com 에 있습니다.
// 
// Date. 18-06-25 
//
// /////////////////////////////////////////

#include <iostream>
using namespace std;

int main(void){

/* 입력받을 정수와 중간 곱하기를 계산할 정수를 선언합니다. */
int cnt = 0;
int semiResult = 1; 

cin >> cnt; // input받을 배열 정수의 개수를 입력받습니다.


int *Array = new int[cnt+1]; // input값들을 저장하는 배열.
int *Result = new int[cnt+1]; // 곱하기 계산된 값들을 저장하는 배열.

/*정수들을 입력 받습니다. */
for(int i = 0; i < cnt; i++){
cin >> Array[i];
}

/* 입력받은 정수들을 출력합니다. */
cout << " InPut : " ;
for( int i = 0; i < cnt; i++){
cout << Array[i] << " ";
}
cout << endl;

/* 
실 계산하는 메인 부분.
먼저 해당 원소를 제외한 나머지 원소들의 곱셈을 구해서 Result 배열에 넣습니다.
다만 이러한 문제풀이는 답은 맞지만 문제에서 요구하는 O(n) TimeComplexity를 만족하지 않습니다.
TimeComplexity를 해결하는 방법은 다음 포스트에서 구현하겠습니다.
*/

for(int i = 0; i <cnt;i++){
for(int j = 0; j< cnt; j++){
if(i !=j) semiResult *= Array[j];
Result[i] = semiResult;
}
semiResult = 1; // 초기화.
}

cout << " OuPut : " ;
for( int i = 0; i < cnt; i++){
cout << Result[i] << " ";
}
cout << endl;


delete[] Array;
delete[] Result;
}

2018년 6월 3일 일요일

백준 1001번 문제풀이

백준 1001번 문제 풀이

문제 : https://www.acmicpc.net/problem/1001





#include <iostream>
using namespace std;

int main(void)
{
    int numA, numB = 0;
 
    cin >> numA >> numB; // 두 수를 입력 받습니다.
 
    cout << numA - numB; // numA 에서 num B를 빼고, 그 값을 출력합니다.
 
}

백준_1000번

백준_1000번 문제

문제 : https://www.acmicpc.net/problem/1000


#include <iostream>

using namespace std;


int main(void)
{
    int A, B    =   0;
    cin >> A >> B;

    cout << A+B;

}

매일프로그래밍 실리콘밸리 패키지 9번

이 문제는 매일프로그래밍에서 출제한 문제로, 모든 문제의 저작권은 매일프로그래밍에 있다는 것을 밝힙니다.

안녕하세요, 매일프로그래밍 이번주 문제입니다.
정수 배열(int array)이 주어지면 0이 아닌 정수 순서를 유지하며 모든 0을 배열 오른쪽 끝으로 옮기시오. 단, 시간복잡도는 O(n), 공간복잡도는 O(1)여야 합니다.

예제)
Input: [0, 5, 0, 3, -1]
Output: [5, 3, -1, 0, 0]

Input: [3, 0, 3]
Output: [3, 3, 0]
 풀이를 보고 싶으시다면 풀이보기를 눌러주세요. 

매주 월요일 아침 8시에 문제와 풀이를 보내드립니다.
문제가 있으시면 언제든 dev@mailprogramming.com 으로 이메일 보내주세요. 



해결 : C++


#include <iostream>
using namespace std;

int main(void) {
int cnt = 0;
cin >> cnt;

int *SaveArray = new int[cnt + 1];
cout << "INPUT : ";
for (int i = 0; i < cnt; i++) {
cin >> SaveArray[i];
}
int count = cnt - 1;
/*Repeat check */

while(count--){
for (int i = 0; i < cnt; i++) {
int temp = 0;
if (SaveArray[i] == 0 && (i+1) != cnt) {
temp = SaveArray[i+1];
SaveArray[i + 1] = 0;
SaveArray[i] = temp;
}
}
}
cout << "OUTPUT : ";

for (int i = 0; i < cnt; i++) {
cout << SaveArray[i] << " , ";
}
}

Heic to jpg 변환기 Mac Automator를 활용해서 만들어보기.

Heic to jpg 변환기 Automator를 활용해서 만들어보기!! 우선 이 글은 기본적인 shell script를 이해하는 분들이 활용하기 매우 좋습니다. 아이폰의 설정 - 카메라 - 포맷 분을 보면 아래와 같습니다. ...