상세 컨텐츠

본문 제목

[Softeer] PYTHON | input() 관련 런타임에러 해결하기 (7353. 나무심기)

취준/2. 코딩테스트

by ranlan 2024. 7. 28. 17:30

본문

728x90

 

이전에 Softeer PYTHON Lv1 연습하다 런타임에러 났던 문제 다시 파헤쳐보기

2024.06.02 - [취준/2. 코딩테스트] - [Softeer] PYTHON 연습문제 풀이 Lv1 나무심기 ~ 주행거리 비교하기

 

[Softeer] PYTHON 연습문제 풀이 Lv1 나무심기 ~ 주행거리 비교하기

오랜만에 코테 공부를 시작했다. 이번 코테 언어는 자바로 준비하려 했으나.. 자바 인풋 받기부터 실패하여 다시 파이썬으로 돌아왔다😂 짧은 시간 안에 간결한 알고리즘 짜기에는 역시 파이썬

juran-devblog.tistory.com

 

참고로 이제 Softeer는 쳐다도 안볼꺼임.. 흥이다.. 이제 자바로 코테 공부할거임..........

 

 

[7353. 나무심기] https://softeer.ai/practice/7353

 

Softeer - 현대자동차그룹 SW인재확보플랫폼

 

softeer.ai

 

JAVA로 푼 풀이는 통과

import java.io.*;
import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        ArrayList<Integer> arr = new ArrayList<Integer>();
        for(int i=0; i<n; i++){
            arr.add(sc.nextInt());
        }

        int res = 0;
        res = ((arr.get(0)*arr.get(1) > arr.get(n-1)*arr.get(n-2)) ? arr.get(0)*arr.get(1) : arr.get(n-1)*arr.get(n-2));
        System.out.println(res);
    }
}

 

우선 런타임 에러 났던 PYTHON 코드

import sys
from itertools import permutations, combinations

n = int(input())
arr = map(int, input().split(""))

arr.sort()
answer = max(arr[0] * arr[1], arr[n-1] * arr[n-2])
print(answer)

그때 당시 옛 동기가 문자열을 정수형 배열로 처리하는 부분에서 문제가 있을 것이라는 힌트를 주었고, 해당 부분을 아래와 같이 수정하니

import sys
from itertools import permutations, combinations

n = int(input())
# arr = map(int, input().split(""))
arr = list(map(int, sys.stdin.readline().split()))

arr.sort()
answer = max(arr[0] * arr[1], arr[n-1] * arr[n-2])
print(answer)

 

놀랍게도 통과 ⭐️

 

sys.stdin.readline()
input()

vscode 상에는 두 경우 모두 문제없이 돌아가지만 근본적으로 무슨 차이가 있나 확인해보았다. (참고로 채점하는 Python 버전은 3.6)

 

input()

  • 주어진 문자열 출력 후 사용자의 입력을 기다림
  • 사용자가 키를 누르면 각각 해당 값이 하나씩 버퍼에 들어감
  • 개행 문자는 입력의 종료로 간주
  • 무엇을 입력하든 문자열로 변환 후 개행 문자 제거한 뒤 값 반환

sys.stdin.readLint()

  • 문자열 출력 기능이 없음
  • 한 번에 읽을 수 있는 글자 수에 대한 매개변수 제공
  • 한 번에 읽어 버퍼에 저장
  • 개행 문자 삭제 과정이 없기 때문에 문자열의 길이가 길어질수록 input()보다 속도가 빠름

 

찾아보니 Softeer 외에 백준 등의 다른 코딩테스트 플랫폼들에서 종종 보이는 이슈라고 한다. 끝!

 

Python 2.x
input()과 raw_input()으로 나뉜다. raw_input()의 경우 입력값을 무조건 문자로 받는 반면, input()은 입력으로 들어온 값을 판단하여 그 값에 맞는 자료형으로 초기화한다.
<type 'str'>​

 

Python 3.x
raw_input() 함수는 사라지고 input()이 raw_input() 역할을 하게 된다. 따라서 input()은 입력값을 모두 문자열로 받는다. 또한 3.x로 넘어오며 모든 변수가 객체(object) 처리됨에 따라 결과 값도 type에서 class로 바뀌게 되었다.
<class 'str'>​

 

 

 


[Python | input보다 sys.stdin.readline의 처리 속도가..] https://green-leaves-tree.tistory.com/12

 

[Python] input보다 sys.stdin.readline의 처리 속도가 빠른 이유는?

백준의 문제를 Python으로 풀다보면 input() 함수를 사용하는 것보다 sys.stdin.readline()으로 입력을 받으면 처리 시간이 짧아지는 것을 경험하는데요. 그 이유에 대해 생각해보고자 합니다. 먼저 sys 모

green-leaves-tree.tistory.com

[input()과 sys.stdin.readline()의 차이] https://hs-archive.tistory.com/35

 

input()과 sys.stdin.readline()의 차이

파이썬에서 input()과 sys.stdin.readline()의 차이에 대해 알아보자. 얻어갈 지식 input()과 sys.stdin.readline()의 차이 input() input()이 호출되면 인자로 주어진 문자를 화면에 출력하고 사용자의 입력을 기다

hs-archive.tistory.com

[Python | Input vs. sys.stdin.readline 차이점?] https://buyandpray.tistory.com/7

 

[Python] Input vs. sys.stdin.readline 차이점?

Python으로 백준 문제를 풀 때 내장 함수 input()으로 입력을 받으면 시간 초과로 오답처리가 되고, sys 모듈의sys.stdin.readline()으로 입력을 받으면 시간 안에 채점이 되는 경우가 자주 발생한다. 왜 그

buyandpray.tistory.com

[Python | 입력 받기 (sys.stdin.readline)] https://herjh0405.tistory.com/50

 

[Python] 입력 받기 (sys.stdin.readline)

코딩 테스트를 준비하다 보면 input의 경우 런타임 에러가 뜰 때가 있다. 실제로도 이것 때문에 애를 먹었는데, 이 것을 방지해줄 sys 라이브러리의 readline() 문법을 알아보자. 1. 한 개의 정수 입력

herjh0405.tistory.com

 

728x90

관련글 더보기

댓글 영역