C++ Shell 이라는 C++ 빌드 기능을 제공하는 Website 공유드립니다.

빌드 환경 로컬 구축이 힘드시거나, 어느 환경에서든 빠르게 단일 코드 빌드하실 때 사용하기 유용합니다.

cpp.sh/

 

 

 

알고리즘 문제푸는 용도로 단일 파일 코드 빌드에 많이 사용하시면 좋을 듯 합니다.

개발 Tool QT Creator 설치 가이드입니다.

 

Download 경로

https://www.qt.io/download

 

 

Try Qt로 Download 시 아래와 같이 입력창이 나옵니다.

귀찮지만 무료로 어쩔수 없습니다.

 

 

입력을 하면 

Verify가 나옵니다. 전화번호와 Email만은 인증을 위해 제대로 적어줍니다.

알겠지만 한국전화번호 포맷이다. +82 10 1234 5678  

 

 

휴대폰으로 온 인증번호 verify 해줍니다.

 

 

Qt 새 Account에서 사용할 password

 

 

 

Download 합니다.

 

 

 

 

다운받은 것 실행합니다.

 

 

 

Next

 

 

 

Qt Download 시 입력한 E-mail 주소와 마지막에 password 입력해주면

E-mail주소로 Verification 메일 한통이 갑니다

 

 

 

 

Verify now 의 파란 link를 누릅니다.

 

 

 입력해 줍니다.

다입력 후 다시 QT Creator 창으로 돌아와서 로그인 합니다.

 

 

Lisence 체킹하는데 Try 버전은 왠만해서는 Pass합니다.

 

 

 

위의 화면 보면 성공 Next

 

 

 

설치 경로 설정 후 Next

 

 

 

우선 Developer and Designer Tools로 Next 합니다. 필요한 component는 추후에도 따로 설치할 수 있고,

필요할 때 설치하는 것이 효율적입니다.

 

 

Agreement 동의 후 Next

 

 

 

Shortcut 설정 후 Next

 

 

 

Install 합니다.

 

 

 

Qt Creator 설치 완료

 

 

위의 문제는 단순히 괄호를 추가하여 가장 작은 값을 만들면 됩니다. 

예제 입력 1

55 - 50 + 40 에서 가장 작은값을 만드는 괄호는

55 - (50 + 40) = -35입니다. => 정답이 -35 로 출력되어 맞죠.

 

 

첫 입력부와 마지막 입력부는 숫자입니다. 

첫입력부 숫자 앞에는 - 부호가 붙지 않으니 무조건 양수입니다. 

 

ex )  A + B - C + D - E - F + G + H - I

A + B - [C + D] - [E] - [F + G + H] - [I]

 

처음 - 부호가 나오고 이후의 숫자들은 +이던 -이던 괄호 처리로 무조건 뺄 수 있습니다.

- 부호 이후부터 나오는 모든 값들을 빼주면, 최대한으로 빼주게 됩니다.

 

 

+와 - 그리고 ()까지 있어서 charater별 check하기위해 string사용하였습니다. 

InputData에서 string으로 식 받아옵니다. 

 

<C++>

#include <iostream>
#include <string>
using namespace std;

//입력받는부분
string input;

void InputData(){

	cin >> input;
}
int main(){

	InputData();

	
	int ans = 0;

	// 숫자 받아올 버퍼입니다.
	string temp;
	//처음 마이너스 부호 구분 flag입니다.
	bool FirstMinusFlag = false;
	
	for(int i = 0; i<= input.size(); i++)
	{
		

		if( input[i] == '-' || input[i] == '+' || input[i] == '\0')
		{

			if(FirstMinusFlag == true)
			{
				//stoi로 string to int 형변형입니다.
				ans -= stoi(temp);

			}
			else
			{
				ans += stoi(temp);
				
			}
			
			// ans에 temp값 처리된 후 다음 숫자를 받아오기 위해 clear합니다.
			temp.clear();
			if(input[i] == '-')
			{
				//처음 minus 부호 시에만 타는 if문입니다.
				FirstMinusFlag = true;
			}
			
			continue;
		}

			//char 한숫자씩 string에 담습니다. stoi로 위에서 형변형을 함으로 10진수 처리 안해줘도 됩니다.
			temp += input[i];
			
			//Debugging Code
			// cout<<"i :"<<i<<"temp :"<<temp<<endl;

	
			//cout<<"i :"<<i<< "ans: "<<ans<<endl;

	}
	cout<<ans<<endl;
	
	return 0;
}

 

<Python>

 

s = str(input())

#int 형
sum = 0

FirstMinusFlag = False

temp = ""

for i in s:

# Python string은 할당된 string이상의 index에 접근하지 못하도록 되어있음
# overflow를 강제로 발생시킬수 없음.
    if(i == '-' or i == '+'):    
        
      
        if(FirstMinusFlag == True):
            sum -= int(temp)
        else :
            sum += (int(temp))
            
        temp = ''
        if(i == '-') :
            FirstMinusFlag = True
        #부호일때 temp에 부호가 추가되지 않도록 continue
        continue
        
    temp += str(i)


#마지막 숫자를 추가해줌
if(FirstMinusFlag == True):
    sum -= int(temp)
else :
    sum += (int(temp))


print(sum)

 

 

 

 

 

 

 

 

 

우선 A, B, C로 각각 다른 조리 시간 버튼의 조합으로 T(요리시간)을 정확하게 맞출 수 있냐?

만약 맞출 수 있다면 A번 누른 횟수, B번 누른 횟수, C번 누른 횟수를 출력하라는 문제입니다. 

 

 

<C++>

// Example program
#include <iostream>
#include <string>

using namespace std;
int main()
{

	//결과값:최소 기능 사용 횟수
	int Acount = 0;
	int Bcount = 0;
	int Ccount = 0;

	// 전자레인지 도구(단위:second)
	int A = 300;
	int B = 60;
	int C = 10;

	//요리시간 T
	int T = 0;

	//불가능 여부 체크 flag
	bool impossibleFlag = false;

	cin >> T;

	while (T != 0)
	{

		if (T >= A)
		{
			//A기능 사용 나눈 몫
			Acount = T / A;
			//A기능 사용 후 나머지
			T = T % A;

		}
		else if (T >= B) {
            
			// B기능 사용 나눈 몫
			Bcount = T / B;
            // B기능 사용 후 나머지
			T = T % B;

		}
		else if (T >= C) {

            // C기능 사용 나눈 몫
			Ccount = T / C;
            // C기능 사용 후 나머지
			T = T % C;
		}
		else
		{

			if (T != 0)

			{
				// A,B,C로 계속 나눴지만 나머지가 남아
				// T 를 나누기 불가능한 경우
				impossibleFlag = true;
				break;
			}
		}
	}

	//T 나누기 불가능 여부 체크 후 
	//각각 결과 값 출력 분기문
	if (impossibleFlag == true)
	{
		cout << -1 << endl;
	}
	else {
		cout << Acount << " " << Bcount << " " << Ccount << endl;

	}
}

 

<Python>

# T 요리시간 단위 초
T = int(input())

# 조리시간 A,B,C도 초 단위로 맞춤
A = 300
B = 60
C = 10


#A,B,C각각의 count를 저장할 변수
A_cnt = 0;
B_cnt = 0;
C_cnt = 0;

#A,B,C로 나누어 떨어지지 않을 경우를 위한 flag
impossible_flag = False

while T != 0:
    
    
    if T >= A:
        A_cnt = int(T/A)
        T = T%A
    
    elif T>= B:
        B_cnt = int(T/B)
        T = T%B
    elif T>= C:
        C_cnt = int(T/C)
        T = T%C
    else:
        if T!= 0:
            impossible_flag = True
            break
        
if impossible_flag == True:
    print(-1)
else:
    print(A_cnt, B_cnt, C_cnt)

 

이번에는 Visual Sutudio와 Github의 링크를 걸어주는 작업을 알려드리 겠습니다.

우선적으로 아래 github생성과 repository 생성이 필수 사항입니다. 

 

2020/10/01 - [Git/Git 환경 설정] - [Git] 1.다운로드 및 설치

2020/10/01 - [Git/Git Hub] - [Git Hub] 1. Repository 생성

 

Repository까지 생성되었으면 github repository를 local PC 비주얼 스튜디오로 복제해보겠습니다.

 

 

 

 

처음 키시면 오른쪽의 리포지토리 복제 버튼을 클릭하시거나

 

 

 

작업중이셨다면 '파일' 메뉴에 리포지토리 복제 기능이 있습니다.

 

 

 

리포지토리 복제를 선택하시면 아래와 같이

리포지토리 위치를 입력해야합니다.

어떤 repository를 clone해줄지 주소를 적어주는 란입니다.

 

 

 

Github에 들어가보면 이전 repository들어진 화면으로 접속합니다.

 

 

 

 

 

해당화면에서 url 주소 정보를 가져와서 리포지토리 위치에 넣어줍니다.

로컬의 repository 코드들을 복제해올 경로도 지정해주고 복제를 누릅니다.

 

 

 

 

기존 repository 코드들이 local 경로에 복제되었습니다.

 

 

'Visual Studio' 카테고리의 다른 글

[Visual Studio] 1. 다운로드 및 설치  (0) 2020.10.01

처음 git을 접하시면 git구조 이해하기도 어렵고

git command들도 익숙하지 않아서 더 이해하시기 어려울 수 있습니다. 

자세한 부분은 Git 카타고리에서 구조 및 각 Command사용법 가이드 드리고

지금은 기본 환경설정을 하기위해서 git command따라 사용하시면 됩니다.

 

git hub link 입니다. 

github.com/

 

 

 

 

Sing up하여 처음 로그인하면 verification e-mail 확인해 줘야 합니다.

 

 

 

 

+ 표시에서 New repository 클릭합니다.

 

 

 

Repository Name은 저장소 이름 지어주고 create합니다. 

 

 

 

http와 ssh 주소를 받게됩니다.

 

 

 

이제 local PC에서 git bash를 실행시킵니다. 

git bash 설치하지 않으신 분들은

2020/10/01 - [Git/Git 환경 설정] - [Git] 1.다운로드 및 설치

git 설치하고 git bash사용 준비하셔서 오시면 됩니다.

 

git bash 실행 후 작업하실 directory로 이동합니다.

 

 

 

repository 생성되었던 부분에서 하기 command를 그대로 사용하셔도 됩니다. 

 

 

git init을 해줍니다.

.git이 생성되었습니다.

 

 

 

test1 파일을 생성해서 commit해보겠습니다.

 

 

 

git add 합니다. 

 

 

 

 

 

 

이전에는 git branch치면 아무것도 나오지 않았지만 commit후 master로 branch 생성된 것을 볼 수 있습니다.

 

 

 

 

 

 

git remote add <단축이름> <url>로 remote url저장소를 origin이랑 이름으로 대신하여 등록한다라고 보시면 됩니다. 

향후에는 url를 치지않고 origin으로 대체하여 사용하시면 됩니다. 

 

예를 들면 

 

현재 commit된 상태에서 remote url로 push해야합니다. 이럴때

push command는

위의 remote add로 단축이름을 만들어주지 않았다면

git push https://github.com/kukjinman/baekjunSolutionCode.git master로 매번 url을 을 입력해줘야하지만

git push origin master로 단추가여 사용하면 됩니다.

 

 

 

 

로그인 fail은 제가 비번을 잘못입력해서 나온 현상입니다 

처음 github연동시 로그인과정을 거쳐야합니다.

 

 

 

git log로 확인해보시면 commit이 remote 저장소에 반영된 것을 확인할 수 있습니다.

 

 

 

 

 

 

예제 입력 1

 

 

5 는 N (사람 수)이고 

3 1 4 3 2 는 각 사람들의 ATM사용 시간입니다. 

ATM을 사용하는데 N명의 사람이 기다리는 최소누적시간을 구하는 문제입니다. 

 

 

위의 문제 설명 Array로 설명해 놓았습니다.

1번째 예시

P[0] = 3 , P[1] = 1, P[2] = 4, P[3] = 3, P[4] = 2

와 같은 순서대로 계산하면 총 걸리는 시간(result)은 3+4+8+11+13 = 39분 입니다. 

result값은 각 사람들의 걸리는 시간의 누적되어 더해집니다

 

 

모두의 기다리는 시간 최소로 만드는 방법은

사용시간이 짧은 사람을 앞순서로 정렬하는 것입니다.

 

2번째 예시

 P[1] = 1, P[4] = 2, P[0] = 3, P[3] = 3 , P[2] = 4

와 같은 순서대로 계산하면 총 걸리는 시간(result)은 1+3+6+9+13 = 32분 입니다. 

 

 

<C++>

#include <iostream>
#include <list>
using namespace std;


int N;
int Wtime[1000];
int Wtime_sorted[1000];


int main(){

    //각 사람의 걸리는 시간을 list로 잡았습니다.
	list<int> mylist;
	
    //N명의 값을 받습니다.
	cin>> N;

    //N명 각각의 걸리는 시간을 받습니다.
	for(int i = 0; i<N; i++)
	{
		cin>> Wtime[i];
        //list에도 담아줍니다.
		mylist.push_back(Wtime[i]);		
	}

	//list 오름차순으로 sort 합니다.
	mylist.sort();

	for(int i = 0; i<N; i++)
	{

        //Wtime_sorted Array에 list front값을 가져옵니다.
		Wtime_sorted[i] = mylist.front();
        //담아둔 front값을 pop 하여 버립니다.
		mylist.pop_front();

	}


	int Sum = 0;

	for(int k= 0; k < N; k++)
	{
        //N명분 사람의 걸린 시간 반복합니다.
		for (int j = 0; j <= k; j++)
		{
            //0 ~ N-1번째 사람 앞사람의 걸린 시간 Sum에 더합니다.
			Sum += Wtime_sorted[j]; 
		}
	}

	cout<<Sum<<endl;

	return 0;
}

 

<Python>

n = int( input())
s = list(map(int, input().split()))


sum= 0;


#오름차순으로 정렬해줍니다. 
s.sort()
# print(s)

#큰 for loop n번까지 진행하는 i 입니다. 
for i in range(n):
    #i의 큰 loop가 돌때마다 i번까지 한번더 도는 작은 for loop입니다.
    for j in range(i+1):
        sum+= s[j]

print(sum)

 

 

 

git 다운로드 link

git-scm.com/

 

 

 

 

 

 

 

 

git 2.28 버전 설치입니다. 

Default 세팅 스크린샷 첨부합니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Git 설치 완료되었습니다. git bash, git GUI 등 git 제공 tool을 사용할 수 있습니다. 

+ Recent posts