본문 바로가기

백준2338 - 긴자리 계산 JS | Python 본문

개발/algorithm

백준2338 - 긴자리 계산 JS | Python

자전하는명왕성 2023. 10. 17. 10:13

https://www.acmicpc.net/problem/2338

다른 언어를 공부해보고 싶다는 생각에, 인프런에서 한 시간 정도 강의를 듣고 처음 풀어본 문제다.

간단한 문제지만 이를 위해 소모했던 시간이 크다보니, 이를 기념하는 후기 포스팅을 남긴다.

 

사실 가장 오래 시간을 소모했던 것은 input 데이터를 받는 초기 설정이었다.

 

이전 자바스크립트로 문제 풀이를 할 때는,

문제 풀이 | 문제 제출 시 데이터 입력을 받는 코드를 최소화하기 위해 삼항 연산자를 사용하여 input 데이터를 받았더랬다.

(이렇게 하지 않으면, 해당 코드를 사용하지 않을 때에도 상황에 맞춰 비활성화해야 한다는 번거로움이 있었기 때문)

 

그 코드는 아래와 같은데, 이렇게 함으로써 platform === 'linux' 환경에서는 제출 시 백준 사이트에서 주는 테스트를 위한 input 데이터,

그렇지 않을 시에는 내가 input.txt에 입력해놓은 데이터가 Input값으로 사용할 수 있게 된다.

const fs = require('fs')
const input = fs.readFileSync(process.platform === "linux" ? "/dev/stdin":"입력.txt")
  .toString().trim()

그리고 이를 파이썬에 맞게 수정하면 다음과 같다.

// 파이썬
import sys
temp = sys.stdin if sys.platform == 'linux' else open('입력.txt', 'r')
input_data = temp.read()

 

 

내가 원하는 방식으로 풀이를 진행하고 있는 사람이 서른 명 중에 한 명은 있을 거라 생각했는데, 없어서 GPT의 도움을 받았다.

 

문제 풀이는 내가 평소 자바스크립트로 문제를 풀이하는 방식으로 풀고싶어 자바스크립트로 먼저 풀이 후에 진행했다.

 

자바스크립트 코드

const fs = require('fs')
const input = fs.readFileSync(process.platform === "linux" ? "/dev/stdin":"입력.txt")
  .toString().trim().split('\n')

function solution(data) {
  const [a,b] = data.map(Number) 
  const result = [a+b, a-b, a*b]
  console.log(result.join('\n'))
}

solution(input)

 

파이썬 코드

import sys
temp = sys.stdin if sys.platform == 'linux' else open('입력.txt', 'r')
input_data = temp.read().splitlines()
# splitlines()라는 매우 '명시적인' 메서드가 인상적이었다

# 아직 함수 선언은 배우지 않았는데, 조만간 포스팅할 계획이다
# 구글에서 함수 선언 | 사용 방식을 찾아 적용했다
def solution (data) :
  # 자바스크립트와 달리 map으로 타입 변환 시 변환을 원하는 데이터 포멧을 먼저 넣는다
  [a,b] = map(int, data) 
  result = [a+b,a-b,a*b]
  print('\n'.join(map(str,result)))
  
solution(input_data)

 

Comments