반응형
int main() {
    ios::sync_with_stdio(0); cin.tie(0);

    //Target, Pattern
    string T, P;
    getline(cin, T);
    getline(cin, P);

    cout << T << '\n';
    cout << P << '\n';




    return 0;
}
반응형

Makefile:4: *** missing separator.  Stop. VScode

 

Vscode로 Makefile을 만들고 make 명령어를 실행하면

 

Makefile:4: *** missing separator.  Stop.

이런 오류가 발생할 수 있다.

 

이 오류가 발생하는 이유는 Makefile의 형식에 맞지 않기 때문이다.

 

이유는 모르겠으나 Makefile은 tab을 통한 공백과 그냥 space를 통한 공백을 구분한다

 

 

파란색으로 드래그가 된 부분을

 

tab을 쳐서 띄워주고 작성해야 오류를 피할 수 있다.

 

그래도 해결되지 않는다면

 

perl -pi -e 's/^  */\t/' (Makefile파일이름)

이 명령을 실행해보자

 

 

참고자료

https://stackoverflow.com/questions/16931770/makefile4-missing-separator-stop

 

makefile:4: *** missing separator. Stop

This is my makefile: all:ll ll:ll.c gcc -c -Wall -Werror -02 c.c ll.c -o ll $@ $< clean : \rm -fr ll When I try to make clean or make make, I get this error: :makefile:4: *** m...

stackoverflow.com

 

반응형
include <cmath>

(int)(log10(구하고 싶은 수)+1)

 

반응형

WSL 글꼴 및 폰트 설정

구글에 검색하면 레지스트리 편집기를 이용해서 바꾸는 글이 많이 나오는데 

 

굳이 그러지 않아도 됩니다.

 

WSL 터미널에서

 

상단의 리눅스 펭귄을 우클릭하면 속성을 찾을 수 있습니다.

WSL 속성

속성에서 글씨체와 글씨크기등 편한대로 조작이 가능합니다.

 

 

반응형

학교 수업을 듣다가

virtual box로 실행한 ubuntu 에서 atom을 써야할 일이 생겼습니다.

 

그런데 우분투에서 아톰을 다운로드 하려고

ubuntu software에서 아톰을 검색했는데 나오지 않았습니다.

ubuntu 20.04 버전 인데 나오지 않네요.

atom은 ubuntu software에서 다운로드 받는 것 말고도 다운 받을 수 있는 방법이 있습니다.

 

 

https://linuxize.com/post/how-to-install-atom-text-editor-on-ubuntu-20-04/

아마 우분투 최신 버전의 ubuntu software에서는

기존의 다운 받을 수 있던 어플리케이션이 없는 경우도 있는 것 같아요

 

 

 

Ctrl + alt + T 로 터미널을 실행하고

sudo snap install atom --classic

이 코드를 쳐서 다운로드 하면 atom을 다운 받을 수 있습니다.

그리고 터미널 창에 atom 을 치면 atom 이 실행됩니다.

 

 

우분투 아톰 다운로드

 

 

우분투 아톰

 

 

 

반응형

비주얼스튜디오 VS LNK1104 오류 해결방법

LNK1104

비주얼스튜디오에서 C++로 가끔 컴파일을 하다보면 저런 오류가 발생한다.

컴파일을 연속적으로 할 때 이전에 실행된 프로그램이 비정상적으로 종료되어

아직 메모리상 남아있는 상태기 때문에 발생하는 오류이다.

열심히 코딩하다 뜨면 열받는다.

 

LNK1104 오류 해결 과정

1. CMD를 실행

2. TASKLIST 를 적어준다. 그러면 현재 작업중인 Task의 목록이 나열된다.

3. TASKLIST에서 컴파일하던 exe 파일의 제목의 옆에 있는 PID를 찾는다.

4. TASKKILL /F /PID (찾은 PID 숫자)

5. 비주얼스튜디오로 다시 컴파일이 가능하다.

 

스크린샷 첨부한 해결 과정

1. CMD를 실행한다.

2. TASKLIST 를 적어준다. 그러면 현재 작업중인 Task의 목록이 나열된다.

LNK1104
PID

3. 컴파일하던 exe 파일의 제목을 찾아 PID를 기억한다. Project1.exe 파일의 PID는 16964다.

 

4. TASKKILL /F /PID 16964(종료하고자하는 PID), 를 해준다.

각자 컴퓨터마다, 프로그램마다 PID가 다르므로 PID를 잘 적어야한다.

TASKKILL /F /PID

 

5. 이제 다시 비주얼스튜디오를 사용하면 된다.

 

 

 

etc..

TASKKILL 명령어 매개변수 설명

cmd창에 TASKKILL /? 를 치면 나온다.

TASKKILL 매개변수

/F는 강제종료 /PID는 프로세스 ID를 의미한다.

반응형

비주얼스튜디오 : no appropriate default constructor available,

dev C++ : no matching function for call to 'Block::Block()' 

[Error] no matching function for call to

알고리즘 문제를 풀다가 다음과 같은 에러를 발견했습니다.

 

본 코드는 다음과 같습니다.

#include <bits/stdc++.h>
using namespace std;

struct Block{
	int area;
	int height;
	int weight;
	
	Block(int a, int b, int c){
		area = a;
		height = b;
		weight = c;
	}
	
	bool operator<(const Block &b) const{
		
		return(area > b.area);
	}
	
}; 

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	int n;
	cin >> n;
	vector<Block> v(n+1);
	vector<int> ch(n+1);
	
	v[0] = Block(INT_MAX, 0 , INT_MAX);
	
	for(int i=1; i<=n; i++){
		int a, b, c;
		cin >> a >> b >> c;
		v[i] = Block(a,b,c);
	}
	
	sort(v.begin(), v.end());
	
	ch[0] = 0;
	for(int i=1; i<=n; i++){
		int max_height = 0;
		for(int j=i-1; j>=0; j--){
			if(v[i].area < v[j].area && v[i].weight < v[j].weight){
				max_height = max(max_height, ch[j]);
			}
		}
		ch[i] = max_height + v[i].height;
		
	}
	
	int ans =0;
	for(int i=1; i<=n; i++){
		ans = max(ans, ch[i]);
	}
	cout << ans;
	
	
}

 

여기서 에러가 발생한 부분은 다음과 같습니다.

#include <bits/stdc++.h>
using namespace std;

struct Block{
	int area;
	int height;
	int weight;
	
	Block(int a, int b, int c){
		area = a;
		height = b;
		weight = c;
	}
	
	bool operator<(const Block &b) const{
		
		return(area > b.area);
	}
	
}; 

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	int n;
	cin >> n;
    //이 부분 
	vector<Block> v(n+1);
	
}

Block 이라는 구조체를 만들고

Block 자료형으로 이루어진 벡터를 만들어

벡터 사이즈를 n+1로 동적으로 초기화해주었는데 오류가 발생했습니다.

 

 

그래서 다음 코드와 같이

벡터 사이즈를 초기화하지 않고 다시 코드를 짜니 오류가 발생하지 않았습니다.

#include <bits/stdc++.h>
using namespace std;

struct Block{
	int area;
	int height;
	int weight;
	
	Block(int a, int b, int c){
		area = a;
		height = b;
		weight = c;
	}
	
	bool operator<(const Block &b) const{
		
		return(area > b.area);
	}
	
}; 

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	int n;
	cin >> n;
	vector<Block> v;
	
	
}

 

구조체를 자료형으로 갖는 벡터의 사이즈를 동적으로 초기화해주면 문제가 발생하는가?

 

하는 의문을 갖고 구글링을 했습니다.

 

 

 

컴파일러 오류 C2512

https://docs.microsoft.com/ko-kr/cpp/error-messages/compiler-errors-2/compiler-error-c2512?f1url=%3FappId%3DDev16IDEF1%26l%3DKO-KR%26k%3Dk(C2512)%26rd%3Dtrue&view=msvc-170 

 

컴파일러 오류 C2512

자세한 정보: 컴파일러 오류 C 2512

docs.microsoft.com

"Void가 아닌 매개 변수를 사용 하는 생성자를 제공 하 고 매개 변수 없이

(예: 배열의 요소로) 클래스를 만들 수 있도록 허용 하려면 기본 생성자도 제공 해야 합니다.

기본 생성자는 모든 매개 변수에 기본값을 사용하는 생성자일 수 있습니다."

 

 

 

구조체, 클래스 내에 기본생성자를 구성하지 않고

 

벡터의 사이즈를 동적으로 초기화해주면 이런 오류가 발생할 수 있는 것 같습니다.

 

그래서 해결방법으로는

 

1. 사이즈를 동적으로 초기화 하지 않거나

 

2. 구조체나 클래스에 기본 생성자를 추가해주면 오류가 발생하지 않습니다.

 

 

1번은 위에서 push_back을 이용한 방법이고

 

2번은 다음 코드와 같이 해주면 됩니다.

 

#include <bits/stdc++.h>
using namespace std;

struct Block{
	int area;
	int height;
	int weight;
	
	// 기본 생성자 추가 
	Block(){
	} 
	
	Block(int a, int b, int c){
		area = a;
		height = b;
		weight = c;
	}
	
	bool operator<(const Block &b) const{
		
		return(area > b.area);
	}
	
}; 

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	int n;
	cin >> n;
	vector<Block> v(n+1);

	
}

Block(){

}

이라는 기본생성자를 추가해주니 벡터 사이즈를 동적으로 초기화해주어도

 

오류가 발생하지 않았습니다.

 

반응형

C++ cout 소수점 n표시 방법

#include <bits/stdc++.h>
using namespace std;

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	double x = 3.333333333;
	
	cout << x << '\n';

}

일반적으로 아무 설정 없이 소수점을 표시하면

3.33333

이런 식으로 표시된다.

 

하지만 알고리즘 문제를 풀거나, 특정한 목적으로 소수점 표시를 적절하게 

 

소수 n번째 자리까지 표시해야 하는 경우가 있다.

 

만약 소수 3번째 자리까지 표시를 하려면

 

cout 이전에

cout << fixed;

cout.precision(3);을 추가해주어야한다.

#include <bits/stdc++.h>
using namespace std;

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	double x = 3.333333333;
	
	cout << fixed;
	cout.precision(3);
	cout << x << '\n';
}
3.333

 

 

소수점 n번째 자리까지 출력할 때

cout << fixed;
cout.precision(n);
cout << x << '\n';

 

만약 cout<<fixed;를 쓰지 않는다면

#include <bits/stdc++.h>
using namespace std;

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	double x = 3.333333333;
	
	cout.precision(3);
	cout << x << '\n';
}

결과

3.33

소수 3번째자리까지 표시가 아니라

숫자 갯수를 3개까지만 표시한다.

cout.precision(n)은 숫자 n개를 표시한다고 생각하면 편하다.

 

 

 

근데 한번 이렇게 설정할 경우

이 코드 밑에 있는 모든 출력에서 n번 째 자리까지만 출력하게 된다.

#include <bits/stdc++.h>
using namespace std;

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	double x = 3.333333333;
	
	cout.precision(3);
	cout << x << '\n';
	cout << 1.234567 <<'\n';
}
3.33
1.23

그래서 이 설정을 변경할 필요성이 있다.

 

 

 

설정을 변경 해주려면

#include <bits/stdc++.h>
using namespace std;
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	double x = 3.333333333;
	double y = 1.234567;
	

	cout.precision(3);
	cout << x << '\n';
	cout << y <<'\n';
	
	
	cout.precision(6);
	cout << x << '\n';
	cout << y <<'\n';
	
	
}
3.33
1.23
3.33333
1.23457

다시 출력하기전 위에 코드를 추가해주면 된다.

 

만약 cout.fixed를 초기화 하고 싶다면

cout.unsetf(ios::fixed)를 추가해주면 된다.

#include <bits/stdc++.h>
using namespace std;

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	double x = 3.333333333;
	double y = 1.234567;
	
	cout << fixed;
	cout.precision(3);
	cout << x << '\n';
	cout << y <<'\n';
	
	cout.unsetf(ios::fixed);
	cout << x << '\n';
	cout << y <<'\n';
	
	
}
3.333
1.235
3.33
1.23

cout.unsetf(ios::fixed) 해서 숫자에서 총 3자리가 출력된다.

cout << fixed 상태에서는 소수점 3자리까지 출력되었다.

 

 

 

cout.precision(n) 소수점 반올림이 되는 문제

 

#include <bits/stdc++.h>
using namespace std;

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	

	double y = 1.77777777;
	
	cout << fixed;
	cout.precision(3);
	cout << y <<'\n';

	cout.precision(5);
	cout << y <<'\n';
	
	
}
1.778
1.77778

간혹가다 백준에서 소수를 출력해야하는 문제가 있다.

 

이런 경우 오차범위가 주어진다. 만약 소수점 자리수를 너무 적게 표시할 경우

 

오차범위에 걸려서 문제를 틀릴 수 있다.

 

이럴 경우를 대비해서 소수점 n번째까지 출력을 하라고 명시가 되지 않은 경우에는

 

그냥 소수점 자리수를 길게 출력하면 편하다.

 

소수는 컴퓨터로 계산할 때 항상 오차가 있다.

 

그래서 애초에 정답에 대해서 오차범위를 명시하고

 

오차범위 안에만 들어가면 답이 맞는다.

 

 

예를 들어 절대/상대 오차 10-2까지 허용한다고 하면

 

소수 5번째자릿수 까지 출력해버리면 편하다.

 

+ Recent posts