14.7 심사문제 질문 있습니다.
, ㅇ ㅇ님이 작성<오답 처리된 코드>
korean, english, math, science = map(int, input().split())
total = korean + english + math + science
average = total/4
if range(0,101) in (korean, english, math, science):
if average >= 80: print('합격')
else: print('불합격')
else: print('잘못된 점수')
--------------------------------------
<정답 처리한 사이트 답안>
korean, english, math, science = map(int, input().split())
total = korean + english + math + science
average = total/4
if 0 <= korean <= 100 and 0 <= english <= 100 and 0 <= math <= 100 and 0 <= science <= 100:
if average >= 80: print('합격')
else: print('불합격')
else: print('잘못된 점수')
-------------------------------------------
질문 할 내용은 총 2가지 입니다.
1.
이 심사 문제에서 요구하는게
and 논리 연산자를 사용하게끔 답이 설정되어 있어서 그런지
오답 처리된 제 코드에는 그런 부분이 없다보니
오답으로 처리되더라고요.
vscode 에서는 잘 작동한다고 출력되던데
이런 방식의 코드는 정답처리가 불가능한건가요?
2.
제가 짠 코드에서
if 조건문에서 " range(0,101) in (korea, english, math, science)"
이 방식과 ........ <1번 방식이라고 가정>
사이트 답안에 나와있는 if 조건문 부분,
"0 <= korean <= 100 and 0 <= english <= 100 and 0 <= math <= 100 and 0 <= science <= 100"
이 방식이 있는데 ........ <2번 방식이라고 가정>
두 가지 방식에서 실제로 어떤 방식이 효율적인건지 궁금합니다.
좋은 알고리즘이라는건
정확성과 효율성 둘 다 갖춘 것이라고 알고 있습니다.
즉, 1번 방식이 2번 방식보다
코드 길이 자체는 짧고 단순하게 되어있는건 맞지만
실제로 파이썬에서 효율적인 건 2개의 방식 중에
어떤 방식이 효율적이다라고 말할 수 있는건가요 ?
예를 들어서,
1번 방식에 사용한 range(0,101) 이 부분이
실제로 0~100까지의 숫자 리스트(?)를 생성하고
in (korean, english, math, science) 이 튜플 안에 있는 4개의 값들이
있는지 없는지 알기위해서
숫자 0~100까지 순서대로 하나하나 확인하는 과정을 거친다라고
가정을 한다면 (혹은 제가 생각한거처럼 실제로 그렇다면)
그에 비해
2번 방식은 단순히 4개의 값들과 범위 안에 있는지의
참거짓만 비교하는 과정만 있으면 되는 거잖아요?
그럼 실제로 효율적인 건 2번 방식일수가 있는건데,
그 말대로라면
코드가 단순하다고 해서 효율적이다라는건 아닌거 같아서...
코드가 간결하고 효율적이다 라는건 그럼 어떤 코드를 의미하는건가요?
그리고 알고리즘의 효율성을 검증하는 방법이 따로 있는건지 궁금합니다.
알고리즘이 효율적이다라는건 결국 결과는 산출해내는
계산 시간을 측정하는것밖에 없는건가요 ?
이 부분에 대해서 의문이 생겨서 질문 남겨봅니다.
Re: 14.7 심사문제 질문 있습니다.
, 도장_ 관리자님이 작성제출한 코드의 구현에 문제가 있어서 심사를 통과하지 못한 것입니다.
첫 번째 테스트 케이스의 결과는 '합격'이어야 합니다.
과목 점수의 과락이 아니라 평균 점수가 80점 이상이면 합격입니다.
파이썬 시각화로 보면
Re: 14.7 심사문제 질문 있습니다.
, 도장_ 관리자님이 작성나머지 질문은 입문 레벨은 아닌 것 같습니다.
코딩 도장은 입문을 위한 것입니다.
효율성을 공부하는 것도 좋지만,
다음 짤로 대신합니다.
코드의 효율을 따지기보단 읽기 쉬운 코드로 작성하세요.
다른 팀원도 읽기 쉬운 코드로 작성하세요. 이 정도 코드를 이해 못한다고 팀원을 깎아내리는 분은
보통의 조직에서는 용인하지 않습니다.
알고리즘이 효율적인 게 아닌 한 일반적인 코드 레벨에서는 효율성을 따지기 어렵습니다.
어떤 방식이든 정해진 범위에서 동작하는 코드이니 문의한 코드나 정답 코드나 O(1) 정도일 겁니다.
O(1) 코드에서 효율을 따지는 건 의미가 없습니다.
파이썬으로 프로토타이핑 후에 C++, 자바 등의 고급 언어로 넘어가면서 성능을 꽤하거나 스케일 업을 꽤하는 것이 일반적입니다.
물론, 회사마다 방식은 다르니 전부 일반화할 수는 없습니다. 데이터 분석이면 파이썬만 사용하는 게 더 흔합니다.
반복하는 것이 아니라 대부분의 데이터 분석은 일회성이 강하기 때문입니다.
Re: 14.7 심사문제 질문 있습니다.
, 도장_ 관리자님이 작성알고리즘 성능 분석에 대해서는 <누구나 자료구조와 알고리즘>(개정 2판)을 추천합니다.
입문 레벨에서 이해하기 쉬운 설명으로 되어 있습니다.
다만, 코드는 파이썬, 루비, 자바스크립트 혼용인데, 수식을 최대한 배제하고 상식적인 설명으로 알고리즘을 설명하고, 성능 분석을 한다는 점에서는 유용한 책입니다. 대다수의 알고리즘 분석책은 수학적으로 설명하기 때문에 입문 레벨에서는 어렵습니다.
Re: 14.7 심사문제 질문 있습니다.
, ㅇ ㅇ님이 작성잊고 있었다가
시간이 지나고 나서 제 코드를 다시 보니
제가 짠 코드에 큰 실수가 있다라는걸
이제 알았습니다.. 생각이 짧았습니다...
알려주셔서 감사합니다!
그리고 프로그래밍에 대해서 깊은 지식이 없었고
프로그래밍을 처음 접하는데 파이썬이 좋다는 말에
강의를 접하게 된 사람 중에 한명입니다.
코드를 작성하는 데 있어서 좋은 코드란 무엇인가에 대해서
고민을 했었습니다.
왜냐하면 제가 코드를 어떻게 작성해야하는지에 대한 방향성을
잡는게 중요하다고 생각했습니다.
그러한 방향성을 토대로
입문 단계에서부터 좋은 코드를 작성하려고 노력하는 습관을
가지는게 저에게 도움이 되며 중요하다고 생각했습니다.
이러한 이유 때문에 2번 질문을 남겼었는데
명쾌하게 답을 내려주셔서 감사합니다!
제가 앞으로 제 코드를 처음 보는 사람이더라도
읽기 쉬운 코드를 짜도록 노력하겠습니다.
또, 알고리즘 관련해서
제 수준에서 읽을 만한 책 추천해주셔서 너무 감사해요!