이 문제 어떻게 푸는게 맞는걸까요? (손코딩 간단한 문제)
오늘 경력직 면접 + 손코딩 시험 보면서 나온 문제 중 하나인데
솔직히 코딩테스트 봐본게 4년 전이고.. 기억도 안나구.. 일했던게 IT기업도 아니구..
그래서 그냥 풀이 자체만 신경썼는데
어떤 메모리 관리, 알고리즘, 자료구조 개념이 들어가도록 설명하는걸까요?
--------
Q. 성적이 입력되고 그 학생의 등수를 출력하는 함수를 작성하시오.
점수는 0~100이고, 점수는 랜덤으로 들어온다. rank 함수는 20억회 이하로 동작된다.(대충 이런 내용)
전역변수, 클래스 등 자율적으로 사용해도 무관.
시간과 메모리 등을 고려하여 작성
ex. 1번째: Score: 70 -> return 1
2번째: Score: 100 -> return 1
3번째: Score: 80 -> return 2
4번째: Score: 70 -> return 4
5번째: Score: 50 -> return 5
int rank(int score)
{
들어갈 코드 작성
}
------
저는 그냥 0~100 배열 만들고,
들어올 때 마다 그 Socre값 이하의 인덱스에 전부 1 더해서 리턴하게 만들었습니다.
대략 아래처럼..(숫자는 const 처리했구용)
int score_array[101] // 전역변수
..
int rank(int score)
{
for(int i = 0; i <= score; i++)
score_array[i]++;
return score_array[score];
}
이럼 어떤 score가 들어오면 그 이전 들어온 낮은 score들은 전부 rank가 한단계씩 밀릴거니까요..
이 코드가 한 번 돌아가면 최악일 때 n번(100번) 돌아가니까 O(n)인거 같은데,
더 빠르게 돌리는 방법이 있을까요?
아니면 문제 의도가 자료구조와 알고리즘을 써서 시간 상관없이 관련 개념에 대한 설명을 원하셨던걸까요 ㅎ.ㅎ..
댓글을 남기려면 로그인이 필요합니다.
로그인 후 이 페이지로 돌아와 바로 댓글을 남길 수 있습니다.