반응형

 

 

정수 2개(x,y)를 차례대로 입력 받은 뒤 (x,y)가 속하는 사분면의 위치를 출력해주는 문제

 

 

사분면

출처 : 위키백과

 

 

1~4 사분면은 위의 이미지로 판별이 가능하니까 x,y의 값으로 판별이 가능함

 

따라서 x를 먼저 입력받은 뒤, x가 +인지 -인지 확인한 다음

y를 입력받아 y가 +인지 -인지 확인하여 사분면을 출력했다

 

1사분면 (+x, +y)

2사분면 (-x, +y)

3사분면 (-x, -y)

4사분면 (+x, -y)

 

 

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

int main() {
	int x,y;
	cin >> x;
	if(x<0){
		cin >> y;
		if(y<0) cout <<3;
		else cout << 2;
	}
	else{
		cin >> y;
		if(y<0) cout << 4;
		else cout << 1;
	}
	return 0;
}

 

 

 

출처 : www.acmicpc.net/problem/14681

 

14681번: 사분면 고르기

점 (x, y)의 사분면 번호(1, 2, 3, 4 중 하나)를 출력한다.

www.acmicpc.net

 

반응형
반응형

 

 

 

문자열로 바꿔서 풀려다가 char를 정수형으로 바꾸는 atoi 사용법을 까먹어서

입력받은 숫자를 10으로 나눈 몫과 나머지를 반복사용해서 풀고싶었는데

이 방식은 입력받는 수의 범위때문인지 답이없어서 그냥 문자열을 int형변환 하는법을 다시 검색해서 수정함

 

 

스택오버플로우는 언제나 좋은 친구

 

간단한 문자-정수 형변환

아스키코드의 숫자는 48부터 시작하여 int로 형변환 후 48을 빼주어야 정확한 값을 얻을수있다

(아스키에서는 0=48이란 소리)

 

다른 방법으로는 문자 자체에서 아예 48을 빼주는 방법이 있다

 

 

 

위의 방법을 이용하여

두번째에 입력받은 수인 input을 아예 string으로 입력받은 다음 하나하나 정수로 바꿔서 더했다

 

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

int main() {
	int cnt;
	string input;
	
	cin >>cnt;
	cin >> input;
	
	int ans=0;
	char c;
	int tmp;
	for(int i=0; i<cnt; i++){
		c= input[i];
		tmp =(int)c-48;
		ans+=tmp;
	}
	cout << ans;
	return 0;
}

 

 

문자열 대신 char형 배열을 이용한 다른 방법

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

int main() {
	int cnt;
	char c[101];
	cin >>cnt;
	
	int ans=0;
	
	for(int i=0; i<cnt; i++){
		cin >> c[i];
		ans+=(int)c[i]-48;
	}
	
	cout << ans;
	return 0;
}

 

 

출처 : www.acmicpc.net/problem/11720

 

11720번: 숫자의 합

첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.

www.acmicpc.net

참고사이트 : stackoverflow.com/questions/5029840/convert-char-to-int-in-c-and-c

 

Convert char to int in C and C++

How do I convert a char to an int in C and C++?

stackoverflow.com

 

반응형
반응형

 

 

 

일단 기다리는 시간을 최소화해야하므로 입력받은 수를 벡터에 저장 후, sort STL을 이용해 정렬한 다음

반복문을 사용해 각 벡터의 값인 v[i]의 값을 계속 축적해가면서 출력할 변수인 ans에 더해줬다

 

입력이 3 1 4 3 2 인 경우

1 2 3 3 4로 정렬을 하고 더하게 되면

1

1+2

1+2+3

1+2+3+3

1+2+3+3+4

 

의 값이 필요하므로

벡터 v의 i번째의 값을 더할때는 i-1까지의 덧셈이 모두 필요하므로

v[i]까지의 합을 더해주는 변수 tmp와 이 합들을 모두 더해줄 ans 변수를 사용했다

처음에는 변수 하나만으로 표현하려고 해서 계속 벡터의 값을 다 더하기만한 13만 찍어냈는데

ans 변수 하나를 추가하니 바로 해결돼버림

 

 

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

int main() {
	vector<int> v;
	int cnt = 0;
	int tmp=0;
	cin >> cnt;
	for(int i=0; i<cnt; i++){
		cin >> tmp;
		v.push_back(tmp);
	}
	
	tmp=0;
	int ans=0;
	sort(v.begin(), v.end());
	
	for(int i=0; i<cnt; i++){
		tmp+=v[i];
		ans+=tmp;
	}
	cout <<ans;
	
	return 0;
}

 

덧셈부분을 좀더 단순화해본 코드

 

1

1+2

1+2+3

1+2+3+3

1+2+3+3+4

 

v[0]은 총 5번 더하고 v[1]은 4번더하고 ... v[4]는 한번 더해서 반복되는 덧셈 과정을 곱셈으로 바꿔줌

 

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

int main() {
	vector<int> v;
	int cnt = 0;
	int tmp=0;
	cin >> cnt;
	for(int i=0; i<cnt; i++){
		cin >> tmp;
		v.push_back(tmp);
	}
	int ans=0;
	sort(v.begin(), v.end());
	
	for(int i=0; i<cnt; i++){
		ans += (cnt-i)*v[i];
	}
	cout <<ans;
	
	return 0;
}

 

 

출처 : www.acmicpc.net/problem/11399

 

11399번: ATM

첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000)

www.acmicpc.net

 

반응형
반응형

 

 

입력이 총 9개의 자연수이므로 비교할 값 변수인 tmp를 0으로 초기화 해서 매번 입력받아 비교해서

들어오는 입력값이 이전에 저장해놓은 값보다 크면 그때마다 몇번째 수인지 저장할 인덱스와 최대값을 바꾸어준다

 

 

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

int main() {
	
	int tmp=0;
	int index=0;
	int input;
	
	for(int i=0; i<9; i++){
		cin >> input;
		if(tmp < input){
			tmp = input;
			index = i+1;
		}
	}
	
	cout << tmp<<"\n"<<index;
	
	return 0;
}

 

 

출처 : www.acmicpc.net/problem/2562

 

2562번: 최댓값

9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오. 예를 들어, 서로 다른 9개의 자연수 3, 29, 38, 12, 57, 74, 40, 85, 61 이 주어

www.acmicpc.net

 

반응형
반응형

 

 

 

 

 

 

5

OOXXOXXOOO

OOXXOOXXOO

OXOXOXOXOXOXOX

OOOOOOOOOO

OOOOXOOOOXOOOOX

 

 

입력의 형태는 크게 횟수와 문자열의 모음으로 문자열 벡터를 생성해서 5번 반복해서 생성한 벡터에 차례대로 입력함

이중 for문을 사용해서 벡터 값에 있는 문자열을 하나씩 꺼내서

문자열 인덱스로 접근 후 각 값이 O인지 X인지 확인 후 점수체계를 만들어줌

 

 

str O O X X O X X O O O
ans 1 2 0 0 1 0 0 1 2 3

 

위의 표를 참고해서 보면 연속되어 퀴즈를 맞힌 OO, OOO의 경우 얻을수있는 점수는 1점이 3개가 아니라

연달아 맞힘으로 인해 점수가 연속해서 맞힌 갯수만큼 증가하게된다

따라서 OO = 3점, OOO = 6점임을 알수있음

 

나는 총점과 str[j]에 해당하는 점수를 각각의 변수로 따로 선언해서 과거 문제를 맞춘 이력을 기억하도록 했다

ex) O : score++;

X : score=0;

 

연속해서 맞히다가 틀릴 경우 연속했던걸 기억해둘필요 없으므로 score를 0으로 리셋해준다

 

 

 

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

int main() {
	int ans;
	int score;
	
	vector<string> v;
	string str="";
	
	int cnt;
	cin >> cnt;
	
	for(int i=0; i<cnt; i++){
		cin >> str;
		v.push_back(str);
	}
	
	for(int i=0; i<cnt; i++){
		ans=0;
		score=0;
		str = v[i];
		
		for(int j=0; j<str.length(); j++){
			if(str[j] == 'O'){
				score++;
				ans+=score;
			}
			else {
				score=0;
			}
		}
		cout<<ans<<"\n";
	}

	return 0;
}

시간 0ms

 

 

 

좀더 줄여본 방법

벡터에 따로 저장 안하고 입력과 동시에 입력받은 문자열 판별해서 점수출력하기

 

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

int main() {
	int ans;
	int score;
	
	string str="";
	
	int cnt;
	cin >> cnt;
	
	for(int i=0; i<cnt; i++){
		cin >> str;
		
		ans=0;
		score=0;
		
		for(int j=0; j<str.length(); j++){
			if(str[j] == 'O'){
				score++;
				ans+=score;
			}
			else {
				score=0;
			}
		}
		cout<<ans<<"\n";
		str="";
	}

	return 0;
}

시간 4ms

코드 길이랑 메모리는 조금 줄었고 시간은 비슷하거나 미세하게 차이가 있는듯

 

 

 

 

 

출처 : www.acmicpc.net/problem/8958

 

8958번: OX퀴즈

"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수

www.acmicpc.net

 

반응형
반응형

 

   472

 * 385

 ㅡㅡㅡ

  2360 = (472*5)

 3776  = (472*8*10)

1416   = (472*3*100)

ㅡㅡㅡㅡ

181720 = (472*385)

 

2360은 단순하게 472와 5의 곱셈으로 표현이 가능하다

385에서 5를 추출해내는 방법은 10으로 나눈 나머지가 제일 간편하다고 생각

 

3776은 472*8의 값으로 실제 우리가 곱셈을 할 때는 80의 곱셈에서 10을 생략한 값을 쓰니까

385에서 8을 추출해내서 곱셈 값을 출력해줌

 

1416은 472*3과 같으므로 385를 100으로 나눈 몫을 사용했다

 

 

마지막 총합인 181720은 처음에 출력 값에 저 모든 값을 더했는데

생각해보니 그냥 곱셈값을 적으면 되는거라 더 단순하게 수정함

 

#include<bits/stdc++.h>

using namespace std;
int main (){
	
	int a,b;
	cin >> a;
	cin >> b;
	cout << a*(b%10) << "\n";
	cout << a*((b/10)%10) << "\n";
	cout << a*(b/100) << "\n";
	cout << a*b;
	return 0;
}

 

 

 

www.acmicpc.net/problem/2588

 

2588번: 곱셈

첫째 줄부터 넷째 줄까지 차례대로 (3), (4), (5), (6)에 들어갈 값을 출력한다.

www.acmicpc.net

 

반응형

+ Recent posts