반응형

백준 1475번 문제

 

 

 

 

별것아닌것같은데 헤매서 힘든문제였다

 

방번호를 0~9까지의 숫자 세트를 이용해서 만드는 문제로

6과 9는 각각 뒤집어서 사용할 수 있다

 

 

9999의 경우 숫자세트 4개가 필요한게 아니라, 9와 6 1세트, 9와 6 1세트 해서 총 2가 출력되면 된다

 

 

 

#include<bits/stdc++.h>
using namespace std;
 
int main() {
	string str;
	cin >> str;
 
	int arr[10]={0};
	int tmp;
	for(int i=0; i<str.size();i++){
		tmp = str[i]-'0';
		if(tmp ==9) {
			arr[6]++;
		}
		else{
			arr[tmp]++;
		}
	}
 
	int max = 1;
	
	if(arr[6] % 2==0){
		arr[6] = ceil(arr[6]/2);	
	}else{
		arr[6] = ceil(arr[6]/2)+1;
	}
	
	for(int i=0; i<9; i++){
		if(max < arr[i]){
			max = arr[i];
		}
	}
 
	cout << max;
 
	return 0;
}

 

숫자를 입력받으면 10으로 나눠주는걸 반복해야되니까

문자열로 받은 다음 하나 하나 쪼개서 숫자로 바꿔 배열에 삽입해주었다

 

그리고, 0부터 9까지의 int형 배열을 만들고 입력받은 숫자에 해당하는 배열 인덱스를 증가시켜줬다

그렇게 마지막에는 배열내의 가장 큰 값을 출력해주면 완성

 

 

 

+ 6과 9의 값은 하나로 합쳐서 관리하는게 편해서 배열을 0부터8까지만 들어가게끔 만들었다

 따라서 arr[6]의 값은 반으로 나누는 과정이 필요하다

 

+ 근데 소수점자리를 올려주는 ceil 함수는 그리 호락호락하지않았다

  (정수로 반환 해주지않아서 2.5가 계속 2로 나오는 바람에 arr[6]의 값을 홀수 짝수 나눠서 계산했다)

 

 

0 1 2 3 4 5 6 7 8
0 0 0 0 0 0 0 0 0

 

 

9999의 경우 배열 예시

0 1 2 3 4 5 6 7 8
0 0 0 0 0 0 4 0 0

 

입력한 숫자에 해당하는 인덱스의 값을 모두 올려주고 난 다음에는

 

arr[6]의 값을 반으로 나누어주고

arr 배열에서 가장 큰 값을 출력해주도록 했다

 

 

 

 

문자를 정수로 변환하는법 참고 (char to int)

 

 

 

 

 

 

 

출처 : https://www.acmicpc.net/problem/1475

 

1475번: 방 번호

첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수 또는 0이다.

www.acmicpc.net

 

https://stackoverflow.com/questions/1253670/why-do-round-and-ceil-not-return-an-integer

 

Why do round() and ceil() not return an integer?

Once in a while, I find myself rounding some numbers, and I always have to cast the result to an integer: int rounded = (int) floor(value); Why do all rounding functions (ceil(), floor()) return a

stackoverflow.com

 

 

반응형
반응형

컴퓨터에 비쥬얼스튜디오를 설치하지않고 코딩테스트 공부하는법

온라인 컴파일러 사이트를 이용하는법이 있다

 

급하게 코드를 수정해야할 일이 생길경우 요긴하게 쓰인다

나는 주로 태블릿을 이용할때, 내 컴퓨터가 아닌 바깥에서 급하게 사용할때

말고도 사실 백준 문제풀때는 주로 여기서만 컴파일을 해본다

 

요즘 누가 코테 공부하는데 비쥬얼켜고 그럼

다들 온라인으로 ㄱㄱ

 

ideone 기본 화면

무료인점과 동시에 가입도 필요없고 컴파일 해본 내 코드를 숨겨둘수도있다

 

덕분에 사이트에 광고는 엄청나게 많은편

 

ideone 지원언어

 

지원되는 언어는 위와같다 웬만한 언어들은 다 지원된다고 보면 되겠다

 

 

주로 사용하는언어

Bash, Pascal, C, Perl, C#, PHP, C++, Python, C++14, Python 3, Haskell, Ruby, Java, SQLite, Objective-C, Swift, Pascal, VB.net

 

그 외의 언어

Ada95, Common Lisp, Java, Prolog, Assembler 32bit, Common Lisp, JavaScript, Python, Assembler 32bit, D, JavaScript, Python 3 nbc, Assembler 64bit, D, Kotlin, R, AWK, D, Lua, Racket, AWK, Dart, Nemerle, Rust, BC, Elixir, Nice, Scala, Brainf**k, Erlang, Nim, Scheme, C, F#, Node.js, Scheme, C++ 4.3.2, Fantom, Objective-C, Scheme, C++14, Forth, OCaml, Smalltalk, C99, Fortran, Octave, TCL, Clips, Go, Perl, Text, Clojure, Gosu, Pico Lisp, Unlambda, Cobol, Groovy, Pike, VB.NET, COBOL 85, Icon, Prolog, Whitespace, CoffeeScript, Intercal

 

 

당연하게 인풋값을 넣을수있다

화면 아래에있는 stdin을 클릭하면 위처럼 값을 넣을수있는 창이 생김

 

입력을 깜빡해도 오른쪽 아래의 run을 누르면 추후에 다시 입력이 가능하니 걱정 ㄴㄴ

 

 

 

stdin 옆에 지구본과 안경그림이 있는데

지구본 그림은 public이라고 내가 컴파일한 소스를 남에게 보여줄수있게 하며

옆의 안경그림은 private 기능과 같이 내가 작성한 코드를 남에게 비공개로 컴파일한다는 뜻이다

 

 

딱 하나 단점으로는

가끔씩 쿠키 저장이 안되는지 run을 눌러 컴파일을 하면 코드가 싹 날라가고 새창이 나온다는 점이다

나는 그래서 혹시모를 예방을 위해 run을 누르기전에 아예 모든 코드를 복사해두고 사용한다

 

그것만 제외한다면 아주 괜찮음

 

 

컴파일속도도 굉장히 빠른편이니 외부에서 코테 스터디라도 하게된다면 이러한 접근을 추천한다

물론 현재 사용하는 노트북 데탑에서도 요긴하게 잘쓰고있긴함

 

 

 

https://ideone.com/

 

Ideone.com

Ideone is something more than a pastebin; it's an online compiler and debugging tool which allows to compile and run code online in more than 40 programming languages.

ideone.com

 

반응형
반응형

백준 10807번 개수 세기 문제

 

 

입력되는 정수의 개수 : 1개부터 100개까지 (1<= N =< 100)

입력되는 정수의 범위 : -100부터 100까지 (-100 <= v =< 100)

 

 

 

자연수가 아니라 정수 v가 -100부터 시작되는 값이어서 어떻게하지 하면서

문제를 보고 초반에는 약간 헤맸는데

 

 

다행히 정수 v의 범위가 자연수에 - 부호를 붙여주면 값은 동일하다고 판단해서

자연수 범위의 배열과 마이너스 일때 배열을 따로 추가해서 관리해보았다

 

입력한 정수의 값이 0보다 큰 경우, arr_plus에 증감연산자를 사용해서

특정 정수를 만날때마다 그 배열의 인덱스를 증가시켜 횟수를 적립시켰다

 

마찬가지로 0보다 작은 경우, arr_minus에 저장해서 관리함

 

사용배열 : arr_plus[100], arr_minus[100]

 

 

 

 

//수도코드

arr_plus[100] = 0;
arr_minus[100] = 0

int input,v;
cin >> input;

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

	if(i>0) arr_plus[i]++;
	else arr_minus[-i]++;
}

cin >> v;

if (v>=0) cout << arr_plus[v];
else cout << arr_minus[-v];

 

 

대충 이렇게 작성해보았는데

 

 

그냥 후루룩 쓰다보니 간과했던게 배열의 범위를 100개가 아닌 101로 주었어야 했음

마이너스 값의 경우 상관없지만, 0부터 100까지의 값을 저장해주어야 하는

arr_plus에서 범위가 초과하는 문제가 생긴다

 

그래서 2번 틀렸다가 겨우 알아냄..

 

 

그렇게 초안에서 다듬고 틀린부분을 수정한 완성본이 아래의 코드

 

 

 

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

int main() {
	
	int cnt,v;
	
	int arr_plus[101] = {0};
	int arr_minus[101] = {0};
	
	cin >> cnt;
	
	int tmp;
	
	for(int i=0; i<cnt; i++){
		cin >> tmp;
		
		if(tmp >=0){
			arr_plus[tmp]++;
		}
		else{
			arr_minus[-tmp]++;
		}
	}
	
	cin >> v;
	
	v>=0 ? cout << arr_plus[v] : cout << arr_minus[-v];
	
	return 0;
}

 

 

cnt : 맨 처음 입력인 입력할 정수의 개수

tmp : 입력받을 정수들

v : 찾을 정수

 

arr_plus[101] = 입력받은 tmp 중 0부터 100까지의 정수의 횟수를 저장할 배열

arr_minus[101] = 입력받은 tmp 중 -100부터 -1까지의 정수의 횟수를 저장할 배열

 

여기서 0을 plus에 둘지 minus 배열에 둘지는 그냥 본인 선택하기에 다를듯

 

 

마지막에 삼항연산자 문법을 사용해서 if else문을 줄여보았다

 

 

 

삼항연산자 문법

 

 

 

 

 

출처 : 

 

 

10807번: 개수 세기

첫째 줄에 정수의 개수 N(1 ≤ N ≤ 100)이 주어진다. 둘째 줄에는 정수가 공백으로 구분되어져있다. 셋째 줄에는 찾으려고 하는 정수 v가 주어진다. 입력으로 주어지는 정수와 v는 -100보다 크거

www.acmicpc.net

 

 

 

C 언어 코딩 도장: 20.2 삼항 연산자 사용하기

먼저 삼항 연산자를 사용하기 전에 if 조건문으로 num1의 값이 참이면 num2에 100을 할당하고, 거짓이면 num2에 200을 할당하는 코드를 만들어보겠습니다. if_else.c #include int main() { int num1 = 5; int num2; if

dojang.io

 

반응형
반응형

2021 IGRUS Newbie Programming Contest

 

 

 

 

 

1시에 시험이 시작됐는데

늦잠+늦은 점심으로 너무 늦게참여해서 한문제만 풀고 끝났음

그래서 올리는 문제 풀이

 

 

 

 

맛있다고 생각하는 기준 (=출력해야할 맛의 순위)

홀수 (홀수가 여러개라면 그중 가장 큰 값의 홀수) > 가장 큰 값의 짝수

 

홀수 * 홀수 = 홀수

홀수 * 짝수 = 짝수

짝수 * 짝수 = 짝수

 

이므로 홀수가 하나 이상인 경우 모든 홀수를 곱셈을 해준게 가장 맛있는 칵테일이다

또는, 홀수가 하나도 없이 3개의 수가 모두 짝수인 경우, 세개의 값을 모두 곱한 것이 가장 맛있는 칵테일이다

 

홀수의 유무를 확인할 수 있게 참,거짓이 가능한 bool 형식 변수 odd를 선언해서 사용했다

 

a,b,c,의 음료를 입력받을 때는, 입력받을 때 마다, 홀수인지 판별 후

1개 이상이라도 홀수가 나오는 경우 odd를 true로 바꿀수있게 하였고,

 

출력해야할 ans에 입력받은 홀수를 곱해주었다

 

odd가 false인 경우는 입력받은 수 중 홀수가 없다는 뜻이므로 출력해야할 ans는 모든 수를 곱한 값(짝수)과 같다

 

 

 

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

int main() {
	
	int arr[3];
	bool odd=false;
	int ans=1;
	
	for(int i=0; i<3; i++){
		cin >> arr[i];
		if(arr[i]%2 !=0){
			ans*=arr[i];
			odd=true;
		}		
	}
    
	if(odd){
		cout <<ans;	
	}
	else{
		cout<< arr[0]*arr[1]*arr[2];
	}	
	return 0;
}

 

 

남은 문제들은 앞으로 여유될때 하나씩 풀어볼 예정

 

 

 

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

 

21312번: 홀짝 칵테일

정진이는 특별한 음료를 가지고 있다. 음료들은 정수로 표현되는 고유 번호를 가지고 있다. 정진이는 이 음료들을 섞어 만든 칵테일을 만든다. 이 칵테일은 홀짝 칵테일이라 부르는데, 홀짝 칵

www.acmicpc.net

 

반응형
반응형

 

 

정수 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

 

반응형
반응형

 

세 자리수의 자연수 3개의 곱셈의 결과에 포함된 0~9까지의 숫자를 한줄 한줄 차례대로 출력하는 문제

 

처음에는 숫자를 문자열로 바꿔가지고 하나씩 잘라서 출력해야되나 했는데

최근에 특정 숫자로로 나눈 나머지를 사용하는 방법이 많았어서

 

크기가 10인 0~9까지의 정수형 배열을 만든다음, 값을 0으로 초기화 시키고

3개의 수를 곱한 결과를 10으로 나눈 나머지의 위치에 ++; 증감연산자를 사용해서 해당 하는 숫자를 1씩 증가시킨 뒤

반복문으로 0~9까지의 배열을 돌아가며 값을 모두 출력해주기로 했다

 

10으로 나눌때 몫이 1이상일때까지 반복하도록 while 문을 사용했음

따라서 10보다 작은 수인 0~9까지의 값이 나온다면 

미리 만들어준 배열의 값을 1씩 증가시킴

 

 

 

 

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

//BOJ 2577

int main() {
	int a,b,c;
	cin >> a>> b >> c;
    
	int n = a*b*c;
	int arr[10]={0};
	int tmp=0;
    
	while(n/10>0){
		tmp = n%10;
		n/=10;
		arr[tmp]++;
	}
    
	arr[n]++;
    
	for(int i=0; i<10; i++){
		cout << arr[i] << "\n";
	}
    
	return 0;
}

 

위의 코드를 좀더 줄여봄

2가지 정도를 단순화했음

1. n을 10으로 나눈 나머지(n%10)의 값을 배열의 인덱스에 바로 쓸수있었다

2. while문의 조건을 변경해봄 (마지막에 n의 값을 반복문 바깥에서 저장해줬어야했는데 반복문 내에서 모두 처리하도록 함)

 

1 -> tmp 변수를 따로 선언해서 사용했는데 바로 인덱스로 사용가능하길래 줄임

 

2-> while문을 사용할 때 n(세 자연수의 곱셈 값)의 값을 10으로 나눈 몫이 0보다 클때까지 반복시켰는데

이런식으로 하면 while문이 종료되고 마지막에 따로 n의 값을 한번 더 저장해줘야돼서

 

반복문 하나로 다 처리하고싶어서 while 의 조건을 n/10 >0이 아니라 n>10으로 수정했다

 

 

 

 

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

int main() {
	int a,b,c;
	cin >> a>> b >> c;
    
	int n = a*b*c;
	int arr[10]={0};
	
	while(n>0){
		arr[n%10]++;
		n/=10;
	}
	for(int i=0; i<10; i++){
		cout << arr[i] << "\n";
	}
	return 0;
}

 

 

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

 

2577번: 숫자의 개수

첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 같거나 크고, 1,000보다 작은 자연수이다.

www.acmicpc.net

 

반응형

+ Recent posts