TIL 23.4.8/ 알고리즘 문제 해결시 오늘 새롭게 배운 내용에 대한 정리.

boj 4344번 문제에서, 

 

 

예제출력에서 원하는 형식이 실수에서 소수 넷째자리에서 반올림하여 소수 셋째자리 표현이었는데, 

이걸 c++에서 어떤식으로 표현해야 하는지에 대해서 잘 모르겠어서 방법들을 찾고 사용하는데 시간이 제법 걸렸다. 

그 내용을 간략하게 기록해두고 다음에 c++에서 소수 표현에 대한 부분이 나오면 다시 확인해보면서 떠올려보자. 

 

일단 처음 알게된 방법은 round()함수를 이용하는 것이었는데, 이건 소수자리에서 반올림이 아니라, 일의자리로 반올림 해주는 함수였어서, 이 round()함수를 활용하여서 내가 원하는 소수 자리에서 반올림 하기 위해서는, 먼저 pow()함수를 활용하여서 pow(10,3)처럼 실행해서 내가 반올림 하려는 소수 넷째자리를 소수 첫재짜리로 자릿수를 옮겨주고,

그리고 난뒤에 round()함수를 사용해서 반올림을 한뒤, 다시 pow(10,3)로 나누어서 소수 3째자리로 만들어주어서 출력해주는 방법을 알게되어서 사용할 수 있었다. 

그런데 이렇게 출력했을때는, 딱 떨어지는 수, 여기서 예를 들면 40%의 경우, 소수 셋째자리까지 표현하고 싶었는데 지속적으로 40.000% 가 아니라 40%로 나타나서 내가 원하는 표현법으로 나타낼 수 없었다.

그래서 다른 방법을 찾아보았을때, 

c++에 fixed를 활용하여서 표현되는 double 형태의 수의 자리수를 몇번째 자리까지 반올림해서 표현할지를 설정할 수 있었는데, 

그 방법의 사용법을 chatGPT를 통해서 검색해보았을때 나온 방법을 첨부해보면, 

이런 방식으로 소수 셋째 자리까지 반올림으로 표현할 수 있었고, 

이 방법을 통해서 문제를 출력하면 내가 원하는 40.000까지 출력해낼 수 있었다. 

 

앞으로 c++에서 소수 자릿수에 대한 표현 문제가 나오면, int로 설정한 변수들을 double로 캐스팅해서 계산하는것을 잊지말고, 그리고 나서 소수표현으로 출력할때는 cout<<fixed<<setprecision(); 형태로 원하는 자릿수를 설정하여서 소수표현 하는 법, 그리고 이와 관련하여서 혹시 추가적으로 

round()함수의 사용, pow()함수의 사용 등에 대해서 떠올려 보도록 하자. 

 

마지막에 신경써주었던 부분들에 대한 코드는 이렇게 작성하였고, 

cout<<fixed<<setprecision(3); 부분을 잘 기억해두도록 하자. 

 

 

+++++++++++++++++++++++++++++

1152번 문제 해결시에, 

이런식으로 입력이 나왔는데, 평소처럼

string s;

cin>> s;

로 입력을 받았을때, the 에서 입력이 멈추었다. 

cin이 공백문자, 줄바꿈등을 만날때까지만 받고, 그리고 나서 공백문자, 줄바꿈을 만나면 입력이 멈추는걸 제대로 파악하지 못하고 있었다. 

그래서 떠올린건 getline이고, getline의 사용 방법에 대해서 공부하였다. 

 

getline을 이용하여서 문자열을 받으면 getline(cin,s);형태로 받을 수 있으며, 공백문자를 만나더라도 끝까지 쭉 받을 수 있다. 

그리고 만약 getline을 통해 입력을 받을때, 특별하게 지정한 문자를 만날때 입력을 멈추려면, 

getline(cin,s,'특정한char'); 형태로 작성시 그 '특정한char'를 만나기 전까지만 입력이 완료된다. 

앞으로 공백문자를 포함하는 string을 입력하는 경우 getline을 떠올리도록 하자. 

 

  Comments,     Trackbacks