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

 

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

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

 

문자열 myString 과 pat이 주어질 때, myString 에서 pat이 등장하는 횟수를 리턴하는 문제이다.

문자열 myString 만큼 for문을 돌고, 그 내부에서 myString 의 idx ~ 끝까지 반복하면서 문자열 temp를 만든다.

temp의 값이 pat 과 같아지면 answer +1 하고 반복문을 빠져나온다. 

 

📝  내가 작성한 코드

def solution(myString, pat):
    answer = 0
    for idx, str1 in enumerate(myString):
        temp = ""
        for str2 in myString[idx:]:
            temp += str2
            if temp == pat:
                answer += 1
                break
            
    return answer

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

[프로그래머스] 모의고사  (0) 2024.02.22
[프로그래머스] 배열 조각하기  (0) 2024.02.15
[프로그래머스] 옹알이(2)  (0) 2024.02.13
[프로그래머스] 옹알이(1)  (0) 2024.02.07
[프로그래머스] OX 퀴즈  (1) 2024.02.07

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

 

프로그래머스

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

programmers.co.kr

 

✅이전에 풀었던 옹알이(1) 에서, "같은 발음을 연속해서 할 수 없다" 는 조건이 추가되었다.

✅ 주어진 문자 babb 에 같은 발음이 연속으로 있는 경우 해당 단어를 건너뛴다.

문자열 곱셈연산(word*2) 을 사용해서 같은 발음을 확인한다.

def solution(babbling):
	answer = 0
	words = ["aya", "ye", "woo", "ma"]
    
	for babb in babbling:
		for word in words:
			if word * 2 in babb:
				break
			babb = babb.replace(word, " ")

		if not babb.strip():
			answer += 1
	return answer

+ Recent posts