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월 9일 월요일

CentOs TeamViewer Application RPM Install Error: libc.so.6 is needed by … issue


Application RPM Install Error: libc.so.6 is needed by …



CentOs 환경에서 teamViewer을 설치하기 위해 rpm파일을 팀뷰어 홈페이지에서 다운로드를 진행한다.

그리고 겪는 문제는 



위와 같은 rpm 의존성 문제가 생겨나게된다.

(needed by .... 이런 문구가 바로 의존성 문제이다. 바로 위에 Failed dependencies라고 적혀져 있다.)

rpm특유의 의존성을 해결하기 위해선 여러가지 솔루션들이 존재한다.


1. 일반적인 패키지 설치
# rpm -ivh [패키지파일]

위와 같은 경우 command는
rpm -ivh teamviewr-suse_13.1.8286.x86_64.rpm 

2. 설치되어 있는 패키지 교체
# rpm -ivh [패키지파일] --replacepkgs

위와 같은 경우 command는
rpm -ivh teamviewr-suse_13.1.8286.x86_64.rpm --replacepkgs


3. 의존성 에러 존재 시 무시하고 설치할 경우
# rpm -ivh [패키지파일] --nodeps

위와 같은 경우 command는
rpm -ivh teamviewr-suse_13.1.8286.x86_64.rpm --nodeps


4.의존성 에러 존재 시 의존성이 있는 패키지들을 먼저 설치한 후 자동으로 설치

- 첫번째 방법 : 에러가 나는 의존성을 따라가며 설치하기
- 두번째 방법 : rpm -ivh [패키지파일] --aid


5. 기존 패키지를 업그레이드 하기(설치되어 있지 않은 경우 rpm -ivh 옵션과 동일함)
# rpm -Uvh [패키지파일]

위와 같은 경우 command는
rpm -Uvh teamviewr-suse_13.1.8286.x86_64.rpm 



이러한 rpm 설치의 단점은 위와 같은 teamviewer의 설치시에는 단순히 의존성파일이 3개밖에 없었지만 향후 다른 프로그램들을 설치할때 어마 무시하게 많은 rpm패키지들을 설치를 해야만 문제가 해결되는 경우가 있다. 그래서 데비안 계통의 OS를 사용하지 않는 개발자들도 늘어나고 있다고 한다.

어찌되었든, 위의 문제는 --nodeps 명령어 (의존성 에러를 존재하고 진행) 하여 정상적으로 해결하였다.

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월 19일 화요일

Git Organization // 깃 통합관리 기법


이번에 스터디에와 같은 그룹계정에서 사용이 유용한 Git Organization 대해서 설명을 하고자 한다.

Organization 만드는 작업은 다음과 같다.

먼저 Git 계정에 접속해 하단의 +버튼을 누르면 아래와 같은 New Organization 나오게 된다.




다음 나오는 Organization name에는 모임명의 이름을 넣는다.
(Git URL 뒤의 이름이 적용되는 부분이다아래와 같이 적용하면
https://github.com/SSAlgoStudy  같이 적용이 되어진다.)

Biling email 경우, 오픈소스에는 무료 라이선 적용이며 하단의 Free버튼을 선택하면 비용이 청구되지 않는다.




  다음 나오는 설문지는 사용자 판단에 따라 넘어가도 문제는 없다.

이 다음 내용은 Git 개인 계정을 만드는 과정과 동일하다.

2018년 6월 5일 화요일

[cent os] vim 깨짐 / 하얀 공백 증상 해결

간혹 vim 을 사용하다가 스크롤을 내리면 흰색의 공백이 생기면서 가독성을 떨어뜨리는 경우가 많아 이번기회에 문제를 해결해보기로 하였다.

현재 회사 워크스테이션 상에서 발현되는 문제는 2가지.

1. 문자의 겹침증상

2. 스크롤시 or 드래그 블록 설정시에 문자의 종료되는 부분 이후로 흰색 공백이 생겨 점박이처럼 배경화면이 깨지는 증상.


먼저

1. 문자의 겹침증상을 해결해보고자 하였고, 이에 대해서 구글링을 진행해서 비슷한 사례를 찾아 보았다. 

 https://askubuntu.com/questions/659357/overlapping-characters-in-terminal

사례의 확인과 기타 다른 부분을 확인시에 이를 해결하는 방법은 글자의 폰트를 수정하여 자간의 간격을 확보하는 방법이었다.


2. 흰색 공백문제


이를 해결하기위하여 vimrc (혹은 bashrc)의 설정을 수정하여 해결하였다.

2018년 6월 4일 월요일

G++ 컴파일 / c++11 standard 컴파일 방법

R-value 참조 문구 해결하는 방법









g++ *.cpp -std=c++11

명령어를 통해 c++11 표준으로 변경해야 정상적으로 R-value참조를 사용할 있음



로그인쉘, 서브쉘 차이점.

로그인쉘에서 실행 : source ./test.sh
 
서브쉘에서 실행    : sh ./test.sh
차이점은
서브쉘에서 실행된 내용이나 실행환경은 서브쉘이 종료되는 순간 없어지는데
로그인쉘에서 실행된 내용이나 실행환경은 로그아웃 할 때까지 없어지지 않는다는데에 있습니다.

두 가지 경우 실행시 발생하는 과정을 자세히 설명하면

sh ./test.sh 실행을 하면
현재 쉘 하위로 쉘(서브쉘)이 하나 더 뜹니다.
cp, cd, cp 명령이 실행됩니다.
cd 명령 때문에 현재 작업중인 디렉토리 위치가 변경되었습니다.
서브쉘이 종료하면 상위의 원래 쉘(로그인쉘)로 돌아가게 됩니다.
서브쉘이 종료되면 현재 디렉토리 위치 정보는 없어지고
서브쉘이 시작된 위치로 돌아가게 됩니다.
그렇기 때문에 sh ./test.sh 을 실행한 후에는 작업중인 디렉토리 위치가 변경되지 않습니다.

하지만,
source ./test.sh 을 할 경우에는
서브쉘에서 해당 스크립트가 동작하지 않고, 로그인쉘에서 동작하기 때문에
cd 명령에 따라 작업중인 디렉토리 위치가 변경되게 됩니다.
source 명령 뒤에 오는 스크립트 첫줄에는 #!/bin/bash 가 필요없습니다. 
>> 경로 설정 없이 바로 적용하여 사용이 가능하므로.(?)
* 현재 로그인쉘 확인하기
    – echo $SHELL

Top Corder Algorithm Training 연습 1일차

Top Corder Algorithm Training 연습 1일차.


Windows 와 Unix 상에서 LF/CR의 차이점


윈도우즈와 유닉스는 전통적으로 아스키 파일에 대한 처리가 다름.

개행문자에 대한 시선차이가 존재하는 것으로
개행문자의 시작을 LF 가지고 하느냐, LF/CR 하느냐의 차이.

LF Line Feed, 다음 줄로 바뀌는 것으로 아스키코드 10
CR Carriage return으로 아스키코드는 13.

정확히 따지면 LF/CR 사용해야 다음줄의 칼럼으로 가는 것이나, 유닉스에서는 일반적으로 LF만으로 LF/CR기능을 표현했고, 윈도우즈는 문자를 사용해서 표현하기 때문에 별도의 문자열 처리를 하지 않더라도 상호 텍스트 문서의 교환에 불편함이 있을 있음.




상기의 그림에서, #define ENTER 10 이란 코드는 ENTER 값의 아스키 코드를 디파인하는 코드인데, 윈도우에서는 13으로 설정해야지만 정상적으로 종료하는 코드를 작성할 있다.


2018년 6월 3일 일요일

centos7 yum 명령어 안될때[Could not retrieve mirrorlist..]


vmware에 최소한의 설정으로 centos7을 설치했더니 wget이 작동하지 않아서 yum으로 설치 시도

 
#yum install wget

 
그랬더니 아래와 같은 문구가 뜬다....




해서 구글링을 해보니 ~/etc/resolv.conf 파일에서 servername 주소를 추가해줘야한다 등 이런 저런 방법이 있었지만 모두 실패.....

 
알고보니  centos6 부터인가 방법이 바뀌었다고 한다.

 
해결법

 
# vi /etc/sysconfig/network-scripts/ifcfg-ens33 로 들어가서 맨 밑에 있는 

 
ONBOOT=no 를 yes로 바꿔주고 저장 후 나감

 
# dhclient
# yum update
# yum install wget

 

centos virtualBOX E_FAIL (0x80004005) issue fix


CENT OS 에는 zip unzip 없어서 별도로 yum 명령어를 통해서 인스톨 해서 사용해야함

현재 vm Virtual Box 상태에서
The virtual machine 'centOS' has terminated unexpectedly during startup with exit code -1073741819 (0xc0000005). More details may be available in 'C:\Users\hskim\VirtualBox VMs\centOS\Logs\VBoxHardening.log'.



결과 코드:
E_FAIL (0x80004005)
구성 요소:
MachineWrap
인터페이스:
IMachine {85cd948e-a71f-4289-281e-0ca7ad48cd89}





이러한 에러가 발생되어짐
이전의 문제는 VM박스를 업데이트 함으로써 수정되었지만, 현재의 문제는 어떻게 처리해야하는지 지금 확인하는 중에 있음 차후 업데이트

>VMBOx 5.2.x 릴리즈 프로그램에서 자주 발생하는 문제로 보이며 이에 대한 해결책은 다운그레이드.. 뿐인것을 확인하여 실시 조치함.

>> 18.06.20 ADD.
위와 같은 경우가 특히 회사에서 더 빈번하게 일어남을 느껴서 테스트해보니 회사에 DRM 관련된 보안프로그램이 설치되어져 있으면 한번씩 일어나는 일이었다는 점을 추가한다.

그냥 맘편하게 vmware 쓰는걸 추천드립니다..

백준 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를 이해하는 분들이 활용하기 매우 좋습니다. 아이폰의 설정 - 카메라 - 포맷 분을 보면 아래와 같습니다. ...