-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[정수론] 9월 19일 #3
base: main
Are you sure you want to change the base?
The head ref may contain hidden characters: "\uC815\uC218\uB860"
[정수론] 9월 19일 #3
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
p3. 2108번 코드리뷰 완료
안녕하세요, 민지님!!! 코드랑 주석 깔끔하게 작성해주셔서 덕분에 리뷰하기 너무 수월했어요👍👍
코드가 워낙 잘돌아가서 사소한 코멘트가 대부분이에요. 한번씩 보고 참고해주세요!
수고하셨습니다🥰😘
|
||
using namespace std; | ||
|
||
int arr[500000]; //수 정렬을 위한 배열. (문제 조건: 수의 개수는 최대 500,000개) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
p3. 전역변수 사용은 지양해주세요! 전역변수를 사용할 경우 오류가 생길 위험이 커지기 때문에 꼭 필요한 경우가 아니라면 지역변수로 선언해주세요.
int count[8001] = {0,}; //최빈값: 원소의 개수를 세는 배열 | ||
//문제 조건: 입력되는 정수의 절댓값은 4000을 넘지 않는다. | ||
|
||
int sum = 0; //산술평균: '모든 수의 합'을 위한 변수 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
p3. sum
을 double로 선언하면, 뒤에서 형변환을 거칠 필요가 없어져요!
(자료형을 섞어서 연산을 하면 컴파일러에서 암시적 형 변환을 해줍니다)
|
||
sum += arr[i]; //산술평균: 합 구하기 | ||
|
||
count[arr[i]+4000]++; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
p3. 4000이 문제에서 주어지는 숫자 범위이니, 상수로 선언하고 사용하시면 더 편할 것 같아요!
for (int i = 0; i < n; i++) | ||
{ | ||
cin >> arr[i]; | ||
|
||
sum += arr[i]; //산술평균: 합 구하기 | ||
|
||
count[arr[i]+4000]++; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
입력과 동시에 sum
이랑 count[]
갱신하는거 효율적이고 깔끔하고 너무 좋아요😎😎
|
||
|
||
//산술평균: 모든 값들의 합 / 수의 개수 | ||
float avg = float(sum) / float(n); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
p3. float보단 double이 더 정밀도가 높기 때문에, double 사용을 권장합니다!
if (avg >= 0) | ||
avg = int(avg + 0.5); | ||
else | ||
avg = int(avg - 0.5); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
p3. 짧은 코드라도 중괄호 사용을 권장드립니다! 나중에 코드를 수정할 일이 생겼을 때 (코드가 한 줄에서 더 길어진다거나) 중괄호가 없으면 불편할 일이 생길 수 있어요
그리고 <cmath>
에서 반올림을 해주는 round()
를 제공하니, 이번 문제처럼 -0을 처리해야 하는 특이케이스가 아니라면 해당 메서드 사용하셔도 좋을 것 같아요!
//최빈값 구하는 반복문 | ||
for(int i = 0; i < 8001; i++) { | ||
if(max < count[i]) { | ||
max = count[i]; | ||
//가장 많은 원소의 개수를 max에 저장 | ||
} | ||
} | ||
|
||
//최빈값이 2개 이상일 경우를 위한 반복문 | ||
for(int i = 0; i < 8001; i++) { | ||
if(count[i] == max) { | ||
v.push_back(i); | ||
//최빈값 오름차순 정렬 (최빈값이 2개 이상일 수도 있음) | ||
} | ||
} | ||
|
||
// 최빈값이 2개 이상이면, 두번째로 작은 값(v[1]) 출력 | ||
cm = (v.size()>1)? v[1]-4000: v[0]-4000; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
p3. 너무 잘 구현해주셨어요!
재사용성을 위해, 최빈값 구하는 부분은 함수화하는게 어떨까요?
cout << mid << '\n'; | ||
cout << cm << '\n'; | ||
cout << range; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
p3. mid
, range
는 한 번 쓰이고 마니, 변수 선언 없이 바로 출력줄에 넣어줘도 좋을 것 같아요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
14490 코드리뷰 완료
안녕하세요 민지님!
코드 잘 봤습니다! 문자열을 분리하는 과정에서 활용하면 좋을 라이브러리 함수에 대해 코멘트 해드렸으니, 샘플코드와 함께 참고해서 봐주시면 좋을 것 같습니다~
과제 하시느라 수고하셨어요!!
for (int i=0; i<str.size(); i++){ | ||
if (str[i]==':'){ | ||
//n | ||
tmp=str.substr(0,i); //임시로 문자 저장할 tmp 변수 | ||
n=stoi(tmp); | ||
|
||
|
||
//m | ||
tmp=str.substr(i+1, str.length()); | ||
m=stoi(tmp); | ||
|
||
break; | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
: 을 기준으로 문자열을 나눌 때 반복문을 이용해서 구현해주셨네요! 해당 방법도 좋지만 라이브러리 함수를 활용하는 방법도 샘플코드에서 소개해주고 있습니다!
코드를 짤 때 라이브러리 함수를 사용하는 것도 시간 절약의 한 방법이 될 수 있으니 참고해서 공부해주시면 좋을 것 같습니다~
[추가제출 확인 완료] |
내용 & 질문
<기존 제출>
<추가 제출>