Skip to content
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

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open

[정수론] 9월 19일 #3

wants to merge 2 commits into from

Conversation

minji1289
Copy link
Collaborator

@minji1289 minji1289 commented Sep 19, 2022

내용 & 질문

과제 제출합니다!

<기존 제출>

2108, 14490

<추가 제출>

1213, 2168

Copy link

@grdnr13 grdnr13 left a 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개)
Copy link

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; //산술평균: '모든 수의 합'을 위한 변수
Copy link

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]++;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

p3. 4000이 문제에서 주어지는 숫자 범위이니, 상수로 선언하고 사용하시면 더 편할 것 같아요!

Comment on lines +24 to +31
for (int i = 0; i < n; i++)
{
cin >> arr[i];

sum += arr[i]; //산술평균: 합 구하기

count[arr[i]+4000]++;
}
Copy link

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);
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

p3. float보단 double이 더 정밀도가 높기 때문에, double 사용을 권장합니다!

Comment on lines +41 to +44
if (avg >= 0)
avg = int(avg + 0.5);
else
avg = int(avg - 0.5);
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

p3. 짧은 코드라도 중괄호 사용을 권장드립니다! 나중에 코드를 수정할 일이 생겼을 때 (코드가 한 줄에서 더 길어진다거나) 중괄호가 없으면 불편할 일이 생길 수 있어요

그리고 <cmath>에서 반올림을 해주는 round()를 제공하니, 이번 문제처럼 -0을 처리해야 하는 특이케이스가 아니라면 해당 메서드 사용하셔도 좋을 것 같아요!

Comment on lines +50 to +67
//최빈값 구하는 반복문
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;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

p3. 너무 잘 구현해주셨어요!
재사용성을 위해, 최빈값 구하는 부분은 함수화하는게 어떨까요?

Comment on lines +74 to +76
cout << mid << '\n';
cout << cm << '\n';
cout << range;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

p3. mid, range는 한 번 쓰이고 마니, 변수 선언 없이 바로 출력줄에 넣어줘도 좋을 것 같아요!

Copy link

@junghk0115 junghk0115 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

14490 코드리뷰 완료
안녕하세요 민지님!
코드 잘 봤습니다! 문자열을 분리하는 과정에서 활용하면 좋을 라이브러리 함수에 대해 코멘트 해드렸으니, 샘플코드와 함께 참고해서 봐주시면 좋을 것 같습니다~
과제 하시느라 수고하셨어요!!

Comment on lines +21 to +34
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;
}
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

: 을 기준으로 문자열을 나눌 때 반복문을 이용해서 구현해주셨네요! 해당 방법도 좋지만 라이브러리 함수를 활용하는 방법도 샘플코드에서 소개해주고 있습니다!
코드를 짤 때 라이브러리 함수를 사용하는 것도 시간 절약의 한 방법이 될 수 있으니 참고해서 공부해주시면 좋을 것 같습니다~

@kwakrhkr59
Copy link

[추가제출 확인 완료]
안녕하세요 민지님~ 추가제출해주신 코드 확인 완료됐습니다😊
이번 과제도 수고 많으셨습니다:)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants