count로 중복되는 랭킹을 제거하고 싶으시면, 처음에 랭킹 계산할때 ranking과 count계산을 따로 해야할 것 같네요. // 랭킹계산 for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) { if (sd[i].sum < sd[j].sum) { ++sd[i].ranking; } } } for (i = 0; i < 9; i++) { for (j = i + 1; j < 10; j++) { if (sd[i].sum == sd[j].sum) { ++sd[i].count; } } } 랭킹 재계산할 때는 for문 하나로 i는 0~9까지 계산해서 sd[i].count만큼 sd[i].ranking에 더해주시면 됩니다. //랭킹 계산 for (i = 0; i < 10; i++) { sd[i].ranking += sd[i].count; }
일단, 코드 부분을 좀 나눠서 프로그램 코드만 해석하면 데이터 입력부분 -> 랭킹계산 -> 랭킹 재계산 -> 출력 이런 과정을 가지고 있네요. count로 하시려는건 랭킹이 중복되는 경우 1등 2등 2등으로 표현하지 않고 1등 2등 3등으로 표현하시려는 거구요.
그런데, 지금 방식에서는 출력할 때, 1번째 학생을 찾고 만약에 그 학생과 같은 성적을 가진 학생이 있다면 다시 모든 학생들의 순위와 총합을 비교하여 순위를 변경하고 있습니다. 출력부분 안에서 매 순번을 검색할때마다 모든 학생들의 성적을 비교하는 건 의미가 없구요. 처음으로 랭킹 재계산 때 다 끝날태니까요. (추가로 랭킹이 같은 경우에는 sum이 같은 경우인데 이 두개를 비교하는건 의미가 없어보이네요..)
아무래도 사회과학분야 전문가분이 더 알맞은 조언을 해주시겠지만, 0.1은 그래도 너무 낮은 수치인 것 같습니다. 만약 두 변수의 상관성이 실제로 존재한다고 가정한다면 두 가지정도 문제가 있을 것으로 보입니다. 우선, 정치적 성향을 수치로 변환하는 과정에 문제가 있을 수 있다고보입니다. 이 부분에 대해서는 정확한 연구과정을 알 수 없기때문에 작성자님이 판단하시거나 설명이 필요합니다. 그리고, 정치적 성향을 제대로 수치화하였다고 가정한다면 회귀분석 전에 두 변수의 분포를 히스토그램이나 산포도를 통해서 확인하신 후 직선관계로 변환과정을 거치셔야합니다. 상관관계를 확인하는 두 변수의 개념이 다르기 때문에 직선적인 관계로 (변수에 log를 수행하는 등의 변환과정을 통해서...) 변환시켜주어야합니다. 만약 직선관계로 변화가 되지 않는다면 비선형 회귀모델을 적용하셔야하구요.