상세 컨텐츠

본문 제목

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

취준/2. 코딩테스트

by ranlan 2024. 6. 2. 20:24

본문

728x90

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

 

프로그래머스와 백준 끌적이다 현대차 공고 준비하여 알게된 현대자동차 그룹 플랫폼 Softeer

프로그래머스나 구름과 비슷한데 아쉬운 점들도 있다. 일단 제출할 때, 수정된 코드가 아닌 이전 제출한 코드로 재제출 된다던지, 제출 했는데 제출 결과에 간헐적으로 안뜬다던지.. 또 제출 후 제출 결과를 확인하는 화면이 따로 있는데, 해당 화면이 아닌 코드 제출 창에서 바로 결과가 나왔으면 하는 바람이 있다. 두 화면의 싱크가 안맞기도 하고 화면을 번갈아가며 내 결과를 확인해야 하는 점이 조금 불편하게 느껴진다. 연습문제 조회 페이지 기능도 조금 아쉽다! 나의 경우, 단계별로 풀어나가는 걸 좋아하는데 아쉽게도 문제 검색 조건과 필터에 난이도가 없다ㅠㅠ 혹시 개발자 크루에 누가 정리해둔게 있을까 싶었는데 없어서 내가 직접 문제집 만들어서 진행 중이다. 열심히 페이지 넘겨가며 레벨1 문제들 찾아서 풀고, 다음엔 레벨2 찾아서 풀고.. 암튼 연습문제가 꽤 있길래 플랫폼에 익숙해질겸, 오랜만에 머리도 좀 굴려볼겸 Softeer 정주행 시작한다 🛫

 

개발자 크루에 내가 정리중인 문제집이니 참고하실 분들은 한번 봐주시길! https://softeer.ai/class/devcrew/main?id=257

 

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

아직 Crew멤버가 아니네요! 지금 가입하고 활발한 Crew 활동을 보여주세요!

softeer.ai

 


 

 

효도의 시작

https://softeer.ai/practice/7724

import sys
print("엄마 아빠 사랑해요!")

 

 

[한양대 HCPC 2023] 개표

https://softeer.ai/practice/7698

import sys

T = int(input())
answer = []

for i in range(T):
    n = int(input())
    n1 = int(n/5)
    n2 = int(n%5)
    answer.append(("++++"*n1) + " " + ("|"*n2))

for i in range(T):
    print(answer[i])

전혀 어려운 문제가 아닌데 이상하게 시간을 쓴 문제.. 처음에는 더하고 나누고 별짓했는데 기준이 되는 수(5) 중심으로 생각하면 간단해진다. 모든 문제든 알맹이 중심으로 간단하게 생각해야할 필요가 있다!

 

 

[한양대 HCPC 2023] Tren del Fin del Mundo

https://softeer.ai/practice/7695

import sys

N = int(input())

answer_x, answer_y = 1001, 1001
for i in range(N):
    inputs = input()
    x=int(inputs.split(" ")[0])
    y=int(inputs.split(" ")[1])
    
    if(y < answer_y) :
        answer_y = y
        answer_x = x

print(answer_x, answer_y)

가장 남쪽을 찾는 문제임으로, y 좌표만 신경쓰면 된다. 문제 잘 읽기 메모

 

 

연탄 배달의 시작

https://softeer.ai/practice/7626

import sys

n = int(input())

dis = []
points = list(map(int, input().split()))

for i in range(1, len(points)):
    dis.append(int(points[i])-int(points[i-1]))
    
min_dis = min(dis)
print(dis.count(min_dis))

난 파이썬 문제를 풀때 딕셔너리 자료형을 좋아하는 편인데, 특히 키별로 카운트 셀 때 딕셔녀리형을 자주 사용한다. 이것도 그렇게 풀까 하다.. 파이썬은 기본 제공하는 라이브러리가 많기에 그냥 배열로 풀었다.

 

 

위험한 효도

https://softeer.ai/practice/7368

import sys

dis = list(map(int, input().split()))
a, b, d = dis[0], dis[1], dis[2]

# a초간 뒤를 봄 (이동 가능), b초간 앞을 봄 (이동 불가)
# 터치 후 변경
# a초간 앞을 봄 (이동 불가), b초간 뒤를 봄 (이동 가능)

s = 0
dis = 0

# 첫번째
n1 = int(d/a)
if d/a==1 : n2 = 0 
else : n2 = n1

s = (n1*a) + (n2*b) + (d - n1*a) # a만큼 이동, b만큼 휴식, a만큼씩 이동 후 남은 거리

# 터치 후 두번째
m1 = int(d/b)
if d/b == 1: m2 = 0
else : m2 = m1
s += (m1*b) + (m2*a) + (d - m1*b)

print(s)

이 문제도 생각보다 시간을 많이 쓴 문제.. 처음엔 이게 레벨1이라고? 했지만 풀고나니 레벨1이었던 문제.. 

이거 또한 처음에 반복문 돌려서 더하고 빼고 난리였는데 다른 사람 소스 참고 하다 원리를 깨달았다.

먼저 1초에 거리 1을 간다는 점이 문제를 간단하게 만든다. 어차피 내가 갈 수 있는 시간(거리)은 술래가 뒤돌아있는 동안(a)만으로 정해진 거리 안에 술래가 몇번 뒤돌아있음 되는지(d/a) 계산하면 된다. 그리고 술래가 앞을 보고 있는 시간(b)은 그냥 단순히 더하기만 하면 된다. 여기서 내가 처음 놓친 부분은 한번만 뒤돌아있어도 술래를 터치할 수 있는 경우! 술래가 앞을 보고 있는 시간은 필요 없으니, 그 부분만 예외처리 해주었다.

 

 

나무심기

https://softeer.ai/practice/7353

import sys
from itertools import permutations, combinations

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

# 조합
arr_com  = list(combinations(arr, 2))
arr_com_sq = []
for i in range(len(arr_com)):
    arr_com_sq.append(arr_com[i][0]*arr_com[i][1])
    
print(max(arr_com_sq))

서로 다른 두 수의 곱 중 최대를 구하는 문제이다. 주어진 수에서 2개를 고르는 모든 경우를 생각해야하기 때문에 난 첫번째로 생각난게 바로 조합이였다. 역시 파이썬이 최고다 하면서 문제를 풀었는데.. 결과는 대실패..

import sys

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

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

구글링해서 찾은 두번째 방법이다. 첫번째 풀이보다 더 효율적인 코드이다. 크기순으로 정렬하여 가장 큰 두 수의 곱을 답으로 내는데, 여기서 기억해야할 점은 음수도 있다는 것이다. 음수의 곱은 양수! 하여 가장 작은 두 수의 곱도 함께 비교해 더 큰 수를 답으로 한다.

근데..... 다른 사람들은 다 이 로직으로 풀었다는데.. 완전 똑같은데.. 난 계속 실패로 뜬다....

 

첫번째 코드나 두번째 코드나 테스트케이트 15개중에 5개밖에 통과 못하는 중이다. 소프티어.. 여러번 틀리면 테스트케이스 공개 좀 해주세여.. 혹시 아시는 분 계시면 댓글 부탁드림니다.. 이거 계속 파다가 그냥 포기함

내가 참고한 포스팅은 자바 풀이 https://velog.io/@mxnzx/Softeer-%EB%82%98%EB%AC%B4-%EC%8B%AC%EA%B8%B0

 

[Softeer] 나무 심기 java

나무 심기간단한 정렬 구현 문제다.두 수의 곱의 최댓값을 구하는 문제 + 음수 포함.

velog.io

 

 

A+B

https://softeer.ai/practice/6295

import sys

n = int(input())

for i in range(n):
    inputs = list(map(int, input().split(" ")))
    print("Case #"+str(i+1)+": "+str(inputs[0]+inputs[1]))

 

 

근무시간

https://softeer.ai/practice/6254

import sys

answer= 0 
for i in range(5):
    times = list(input().split(" "))
    t1 = list(times[0].split(":"))
    h1, m1 = int(t1[0]), int(t1[1])
    t2 = list(times[1].split(":"))
    h2, m2 = int(t2[0]), int(t2[1])
    
    if t2[1] < t1[1] :
        answer += (60-m1)+m2
        answer += (h2-h1-1)*60
    else :
        answer += (m2-m1)
        answer += (h2-h1)*60
        
print(answer)

코드를 더 짧게 줄이고 싶어 고민 중

 

 

주행거리 비교하기

https://softeer.ai/practice/6253

import sys

inputs = list(map(int, input().split(" ")))
a, b = inputs[0], inputs[1]

if a==b : print("same")
elif a>b : print("A")
else : print("B")

 

 

 

728x90

관련글 더보기

댓글 영역