PGR21.com
- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다.
- (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다.
통합 규정을 준수해 주십시오. (2015.12.25.)
Date 2016/10/11 20:21:48
Name Patrick Jane
Subject [질문] 파이썬 프로그래밍 질문입니다!
파이썬 문제푸는중에 어떻게 구현할지 모르겠어서 아이디어를 얻고자 올렸습니다 ㅠㅠ.
우선 문제는


도현이네 반 학생 N명의 이름과 국어, 영어, 수학 점수가 주어진다. 이 때, 다음과 같은 조건으로 학생의 성적을 정렬하는 프로그램을 작성하시오.

국어 점수가 감소하는 순서로
국어 점수가 같으면 영어 점수가 증가하는 순서로
국어 점수와 영어 점수가 같으면 수학 점수가 감소하는 순서로
모든 점수가 같으면 이름이 사전 순으로 증가하는 순서로

해서 단순하게 버블소트로 제어문 몇개 넣어서 만들었습니다.
a=int(input());squ2=[];re=0
squ=[input().split() for x in range(a)]
for i in range(a):
    for j in range(1,4):
        squ[i][j]=int(squ[i][j])
for i in range(a):
    max=0;k=['zzz',0,100,0]
    for j in range(a-i):
        if squ[j][1] > k[1]:    #국어 내림차순
            k=squ[j];re=j
        elif squ[j][1] == k[1]:  
            if squ[j][2] < k[2]:     #영어 오름차순
                k=squ[j];re=j
            elif squ[j][2] == k[2]:
                if squ[j][3] > k[3]:     #수학 내림차순
                    k=squ[j];re=j
                elif squ[j][3] == k[3]:
                    if squ[j][0] < k[0]:
                        k=squ[j];re=j
    squ2.append(k)
    del squ[re]
for p in range(a):
    print (squ2[p][0])

이렇게 했더니 샘플 인풋 아웃풋은 맞는데, 시간초과가 뜨더라구요... 혹시 다른아이디어 있으신분 계신가요?
시간제한은 1초입니다!!
b = sorted(sorted(a, key = lambda x : x[0]), key = lambda x : x[1], reverse = True)
이런식으로 하려했더니 같으면 내림차순 or 오름차순이라는거에 맞지않게 sort를 하더라구요...

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
회색사과
16/10/11 20:28
수정 아이콘
제어문을 쓸 게 아니라...
이름 오름차순 정렬 - 수학점수 내림차순 정렬 - 영어 점수 오른차순 정렬 - 국어 내림차순 정렬 (버블소트에 =은 다 빼고)

돌리면 되지 않을까요?

(그런데 라이브러리 쓰면 안되나요?... 복수 기준 정렬 하는 라이브러리가 있었던 것 같은데...)
회색사과
16/10/11 20:30
수정 아이콘
Patrick Jane
16/10/11 20:58
수정 아이콘
감사합니다! 링크랑 밑에분 댓글보고 새로운거 배워갑니당....
묘이미나
16/10/11 20:45
수정 아이콘
lambda 를 이용하여 multiple key 로 sorted 가 가능 합니다.
tuple 을 이용해서 순서를 구성해주면 끝입니다.
오름차순 내림차순은 +/- 를 붙이면 됩니다.
lambda x:(-x[1],-x[2],-x[3],x[0])

>> data = [['kim',90,90,80],['lee',90,80,70],['amy',90,90,80],['terry',90,90,70],['kei',80,100,70]]
라고 하면,
>> sorted(data, key = lambda x:(-x[1],-x[2],-x[3],x[0]))
를 실행하면,
[['amy', 90, 90, 80], ['kim', 90, 90, 80], ['terry', 90, 90, 70], ['lee', 90, 80, 70], ['kei', 80, 100, 70]]와 같은 결과를 얻습니다.

국어, 영어, 수학을 내림차순으로 하기 때문에, (-) 를 추가하고,
이름은 오름차순이기 때문에, 그대로 두면 됩니다.
Patrick Jane
16/10/11 20:59
수정 아이콘
감사합니다 ㅠㅠ 또 새로운거 배워가네요... 파이썬 알면알수록 편리한게 많네요..!
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
91343 [질문] 어머니가 교통사고를 당하셨습니다 [8] 비염2778 16/10/11 2778
91342 [질문] 알뜰폰에서 삼사통신사로 번호이동 할때 불이익이 있나요?? [2] 으흫2359 16/10/11 2359
91341 [질문] 파이썬 프로그래밍 질문입니다! [5] Patrick Jane3236 16/10/11 3236
91340 [질문] 면접용 정장 [3] 정은지짱2978 16/10/11 2978
91339 [질문] 장동건 vs 정우성 [42] 마르키아르7071 16/10/11 7071
91338 [질문] 노트북용 DDR3L과 DDR4 소켓 모양이 같나요? [2] 순규성소민아쑥2550 16/10/11 2550
91336 [질문] 노트7환불받으면 어떤폰으로 갈아타는게좋을까요 [11] 롯데닦이2425 16/10/11 2425
91335 [질문] 이사할때 옷정리 관련해서 질문드립니다. [2] 하드한인생3392 16/10/11 3392
91334 [질문] HDMI 연결 관련 질문드립니다. [3] V.serum1754 16/10/11 1754
91333 [질문] 윈도우 10 계정관련 질문입니다. 민방위면제2357 16/10/11 2357
91332 [질문] 가장 리얼한 레이싱게임 뭐가 있을까요? [13] 1llionaire2993 16/10/11 2993
91331 [질문] 수학문제 질문 드립니다 [6] 크르르르2332 16/10/11 2332
91330 [질문] 차량 하부 커버가 깨졌습니다. (사진有) [5] Liverpool FC9879 16/10/11 9879
91329 [질문] 혹시 다이아TV MCN 에서 활동하시는 분 계신가요? [2] 오구오구마시따4037 16/10/11 4037
91328 [질문] 신림동쪽 미용실 질문입니다. [5] Vincent van Gogh3093 16/10/11 3093
91327 [질문] 문명6 사양에 대해 밝혀진게 있나요? [8] 4568 16/10/11 4568
91326 [질문] 맥북 사용자분들 질문이 있습니다. [2] Alonso2075 16/10/11 2075
91325 [질문] 기계로 스트라이크, 볼 판정하는걸 어떻게 보세요? [67] 마르키아르3743 16/10/11 3743
91324 [질문] 홍진호 팬 미팅? [4] 강약중강약2866 16/10/11 2866
91323 [질문] [하스스톤] 얼방 법사 운영 어떻게 하나요? [19] 치키타2989 16/10/11 2989
91322 [질문] 칼퇴하는 회사/업종 알려주실 수 있으실까요? [30] 칼퇴추구자6489 16/10/11 6489
91321 [질문] [LOL] 누누정글 핫한가요? [7] 후루얌3187 16/10/11 3187
91320 [질문] [디아2] 맨땅 소서 질문입니다. [7] 비빅휴12869 16/10/11 12869
목록 이전 다음
댓글

+ : 최근 1시간내에 달린 댓글
+ : 최근 2시간내에 달린 댓글
맨 위로