https://softeer.ai/practice/7626

 

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

 

softeer.ai

산타가 방문할 가능성이 있는 서로 다른 두 마을 조합의 수를 구하는 문제이다.

산타가 방문할 가능성이 있는 마을은 가장 거리가 가까운 두 마을이므로, 먼저 각 마을 간 최소 거리를 구한 후 모든 마을의 위치 조합을 구한다.

파이썬에서는 itertools 라이브러리를 사용해서 쉽게 조합을 얻을 수 있다.

각 마을 간 모든 조합을 구한 후, 최소 거리를 만족하는 조합만 카운트한다.

 

📝  내가 작성한 코드

import sys
from itertools import combinations

n = int(input())
towns = list(map(int, input().split()))
answer = 0

# 각 마을 간 최소 거리 구하기
dist = towns[1]-towns[0]
for idx1 in range(len(towns)-1, 0, -1):
    for idx2 in range(idx1):
        if towns[idx2+1] - towns[idx2] < dist:
            dist = towns[idx2+1]-towns[idx2]

# 모든 마을 위치 조합 구하기
towns = list(combinations(towns,2))

# 조합에서 마을간의 거리가 dist와 일치하는 경우에 answer + 1
for town in towns:
    a,b = town
    if b-a == dist:
        answer += 1

print(answer)

 

좀 더 깔끔하게 풀 수 있는 방법이 있을 것 같은데...ㅠㅠ

'개발 > 코딩테스트' 카테고리의 다른 글

[프로그래머스] 캐릭터의 좌표  (0) 2024.02.23
[Softeer] 위험한 효도  (0) 2024.02.22
[Softeer] 근무 시간  (0) 2024.02.22
[프로그래머스] 모의고사  (0) 2024.02.22
[프로그래머스] 배열 조각하기  (0) 2024.02.15

https://school.programmers.co.kr/learn/courses/30/lessons/120861

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📝  내가 작성한 코드

def solution(keyinput, board):
    answer = []
    # 위 아래 왼쪽 오른쪽 이동방향
    dx = [0, 0, -1, 1]
    dy = [1, -1, 0, 0]
    move_type = ["up", "down", "left", "right"]
    # 초기 위치
    x,y = 0,0
    n,m = int(board[0]//2), int(board[1]//2)

    for i in keyinput:
        for move in range(len(move_type)):
            if i == move_type[move]:
                nx = x+dx[move]
                ny = y+dy[move]
	# board를 벗어나는 경우 무시한다 (음수인 경우도 비교해야 하기 때문에 절대값 함수 사용)
        if abs(nx) > abs(n) or abs(ny) > abs(m):
            continue
        # 좌표를 이동한다
        x,y = nx,ny
    
    return [x,y]

'개발 > 코딩테스트' 카테고리의 다른 글

[Softeer] 연탄 배달의 시작  (0) 2024.02.24
[Softeer] 위험한 효도  (0) 2024.02.22
[Softeer] 근무 시간  (0) 2024.02.22
[프로그래머스] 모의고사  (0) 2024.02.22
[프로그래머스] 배열 조각하기  (0) 2024.02.15

📝  내가 작성한 코드

import sys

def calc_cycle(a,b,d):
    time = 0
    view = 'back'
    while d > 0:
        if view == 'back':
            for i in range(a):
                d -= 1
                time += 1
                # 남우가 술래에게 닿으면 return
                if d == 0:
                    return time
            view = 'front'
        elif view == 'front':
            time += b
            view = 'back'

a,b,d = input().split()
a,b,d = int(a),int(b),int(d)

# 터치 전
times = calc_cycle(a,b,d)

# 터치 후 값 바꿔서 한번더 실행
a,b = b,a
times += calc_cycle(a,b,d)

print(times)

'개발 > 코딩테스트' 카테고리의 다른 글

[Softeer] 연탄 배달의 시작  (0) 2024.02.24
[프로그래머스] 캐릭터의 좌표  (0) 2024.02.23
[Softeer] 근무 시간  (0) 2024.02.22
[프로그래머스] 모의고사  (0) 2024.02.22
[프로그래머스] 배열 조각하기  (0) 2024.02.15

월요일부터 금요일까지 직원들의 근무 시간을 입력받아서 총 몇 분을 근무했는지 구하는 문제이다.

✅ input 값이 근무 시작시간(시간:분) , 근무 종료시간(시간:분)으로 주어진다.

근무 종료시간과 근무 시작시간의 차이를 구해서 더해주면 된다. 분 단위로 계산하기 위해서 시간 * 60 해준다.

 

📝  내가 작성한 코드

import sys

answer = 0
for i in range(5):
    stime,etime = map(str, input().split())
    s_hour,s_min = stime.split(":")
    e_hour,e_min = etime.split(":")
    
    answer += (int(e_hour)*60+int(e_min)) - (int(s_hour)*60+int(s_min))

print(answer)

https://school.programmers.co.kr/learn/courses/30/lessons/42840

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📝  내가 작성한 코드

def solution(answers):
    answer = []
    scores = [0,0,0]
    
    # 각 수포자들이 찍는 정답 배열
    person_1 = [1, 2, 3, 4, 5]
    person_2 = [2, 1, 2, 3, 2, 4, 2, 5]
    person_3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    
    # answers 배열을 반복하면서 정답과 수포자의 답이 일치하는 지 체크한다
    for idx, val in enumerate(answers):
    	# 1번 수포자는 5개의 답이 반복되므로 index를 5로 나눠서 정답 배열 안에서 돌도록 한다
        if val == person_1[idx%5]:
            scores[0] += 1
        # 2번 수포자는 8개의 답이 반복되므로 index를 8로 나눠서 정답 배열 안에서 돌도록 한다
        if val == person_2[idx%8]:
            scores[1] += 1
        # 3번 수포자는 10개의 답이 반복되므로 index를 10으로 나눠서 정답 배열 안에서 돌도록 한다
        if val == person_3[idx%10]:
            scores[2] += 1

	# 점수 계산이 끝난 후 가장 높은 점수를 가진 index 리스트 리턴
    for i,score in enumerate(scores,1):
        if score == max(scores):
            answer.append(i)
    return answer

 

 

올해 1월 첫째주 부터 약 6주 간 진행했던 혼공학습단 11기가 끝났습니다. 😎

 

항상 파이썬 공부 해야지 하고 생각만 하고, 책 앞 부분만 몇 번 뒤적거리다가....

회사 다니면서 개인 공부하기 바쁘다는 핑계로 슬그머니 덮어 놓기 일쑤였는데, 이번에는 기본서 한 권을 다 볼 수 있었습니다!!

 

사실 제가 의지박약이라 초반엔 의욕이 넘쳐서 이것 저것 하다가 갈수록 늘어지고 결국 포기했던 경험이 많았어서, 내심 완주를 걱정했었는데 성공해서 너무 뿌듯하고 행복합니다 😊

 

회사 업무에, 이직 준비에 이래저래 바빴던 나날이었지만, 매주 미션을 제출하면 족장님이 장문의 정성스러운 코멘트를 달아 주십니다.

바쁘고 힘들 때는 하기 싫은 마음도 들었지만... 항상 달아주시는 따뜻한 댓글, 폭풍칭찬 덕분에 더 의욕이 샘솟고, 다음 주도 꼭 제출해야지 하는 원동력이 되었던 것 같아요. ❤️

 

또 다른 학습단 분들이 공부하신 내용도 보면서 자극 받을 수도 있었구요.

 

이번 활동을 통해서 많은 것을 얻을 수 있었습니다.

 

매 주 꾸준히 파이썬을 공부하고, 공부한 내용을 나만의 언어로 정리한 것, 그리고 정해진 기간 내에 모두 끝냈다는 것, 파이썬으로 간단한 프로그램을 작성할 수 있게 되었고 파이썬으로 코딩테스트 문제를 풀어볼 수 있게 되었다는 것. 모두 혼공학습단을 하면서 얻게 된 성과입니다.

 

그리고 활동을 시작하면서, "천재지변이 아니면 절대 지각하지 말자" 라고 다짐 했었는데, 이 부분도 지켜진 것 같아 뿌듯합니다.

 

혼공학습단 11기 활동은 여기서 끝나지만, 책 내용을 완벽하게 이해한 것은 아니기 때문에 파이썬 공부는 계속하려고 합니다. 파이썬 마스터가 되는 그 날까지! 🫡

혼공학습단 12기는 올해 6월 중순에 또 모집 한다고 합니다.

12기 모집하면.... 또 신청 할 거에요 👻

https://school.programmers.co.kr/learn/courses/30/lessons/120887

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

i 부터 j 까지의 범위에서 k가 몇 번 등장하는 지 구하는 문제이다.

✅ i~j 범위로 반복문을 돌려주고, 범위 내의 숫자에 대해서 k와 같은 값이 있는지 확인하고, 있으면 answer + 1

✅ 문자로 바꿔서 확인하면 쉽게 구할 수 있다.

 

📝  내가 작성한 코드

def solution(i, j, k):
    answer = 0
    for idx in range(i, j+1):
        for c in str(idx):
            if c == str(k):
                answer += 1
    return answer

 

https://school.programmers.co.kr/learn/courses/30/lessons/181893

 

문제 설명이 조금 이해하기 힘들어서 생각보다 시간이 소요된 문제였다.

query 배열을 순서대로 순회하면서, query[idx] 가 짝수인 경우 arr 배열에서 query[idx] 번째 인덱스 뒤의 요소들을 잘라서 버린다.

query[idx] 가 홀수인 경우, arr 배열에서 query[idx] 번째 인덱스 앞의 요소들을 잘라서 버린다.

지문에서 'query[i] 번 인덱스를 제외하고~' 라는 부분이 있어서 헷갈렸는데, 이 뜻은 arr 에서 요소를 제거할 때 query[i] 번째 요소는 남겨두라는 의미였다! 🥲

파이썬의 슬라이스를 사용하면 쉽게 풀 수 있다.

 

📝  내가 작성한 코드

def solution(arr, query):
    for idx, qry in enumerate(query):
        if idx % 2 == 0:
            arr = arr[:qry+1]
        elif idx % 2 != 0:
            arr = arr[qry:]
            
    return arr

+ Recent posts