상세 컨텐츠

본문 제목

[Softeer] PYTHON | 연습문제 풀이 Lv2(1) X marks the Spot ~ 장애물 인식 프로그램

취준/2. 코딩테스트

by ranlan 2024. 6. 30. 15:46

본문

728x90

고작 2단계뿐 안됐는데 왜 진도가 안나가는걸까요😭 난 도대체 언제 알고리즘 실력이 느는걸까요😱😱

 

[SOFTEER] 내가 단계별로 정리한 문제집 https://softeer.ai/class/devcrew/main?id=257

 

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

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

softeer.ai

[GITHUB] 도장깨기가 목표였으나 현실은 내가 뚜드려맞는 중 https://github.com/ijo0r98/codingtest-py 

 

GitHub - ijo0r98/codingtest-py: 코딩테스트 내가 접수한다

코딩테스트 내가 접수한다. Contribute to ijo0r98/codingtest-py development by creating an account on GitHub.

github.com

 


 

[한양대 HCPC 2023] X marks the Spot

https://softeer.ai/practice/7703

실패한 첫 번째 풀이

import sys
sys.setrecursionlimit(5000)

n = int(input())
answer = ""
for i in range(n):
    inputs = input().split(" ")
    s, t = inputs[0].upper(), inputs[1].upper()

    index = s.index("X")
    answer+=t[index]

print(answer)

결국 원인은 못찾고 구글링..

N = int(input())
answer = []
for _ in range(N):
    S, T = map(str, input().split())
    for i, s in enumerate(S):
        if s == 'x' or s == 'X':
            answer.append(T[i].upper())
            break

print(''.join(answer))

자바로 코테 준비할때 문자열 추가 시, + "" 말고 다른 객체를 사용하라는 글을 봤었다. 뭐 그런 이유인지는 모르겠으나 아직 원인은 모른채 넘어감

 

 

연탄의 크기

https://softeer.ai/practice/7628

import sys

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

arr.sort()
answer = -100

for i in range(2, max(arr)+1):
    cnt = 0
    for j in range(n):
        if arr[j]%i==0 : cnt +=1
    answer = max(answer, cnt)

print(answer)

처음에 주어지는 연탄 크기 중에 반지름 크기가 정해져야하는 줄 알고 잘못풀었던 문제, 알고보니 반지름 크기는 내가 정하는 거였음

 

 

진정한 효도

https://softeer.ai/practice/7374

import sys

arr = []
for i in range(3):
    arr.append(list(map(int, input().split())))

answer=100
for i in range(3):
    col = max(arr[i][0], arr[i][1], arr[i][2]) - min(arr[i][0], arr[i][1], arr[i][2])
    row = max(arr[0][i], arr[1][i], arr[2][i]) - min(arr[0][i], arr[1][i], arr[2][i])
    answer = min(answer,min(col, row))
    
print(answer)

가로 세로 길이가 3으로 정해져있었기에 모든 경우의 수를 다 비교하여 답을 구했다. 

 

 

금고털이

https://softeer.ai/practice/6288

실패한 첫번째 풀이

prices={}
for i in range(n):
    inputs = list(map(int, input().split()))
    prices[inputs[1]]=inputs[0] # key 가격 : value 무게
for key in prices.keys(): 
    if prices[key] <= w:
        answer += (key * prices[key])
        w -= prices[key]
    else: 
        answer += (w * key)
        break

왜 틀렸는지 모르겠어서 구글링하고 개발자톡 찾아보다 얻은 힌트 https://softeer.ai/connect/devtalk/1357

 

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

계속 틀리는데, 잘 모르겠습니다 ㅜ import sys input = sys.stdin.readline case = dict() W, N = map(int, input().split(' ')) for _ in range(N):     M, P = map(int, input().split(' '))     case[P] = M list1 = sorted(list(case.keys()), reverse

softeer.ai

비싼 가격을 얻기 위해 가격순으로 귀금속을 탐색하려했다. 그래서 처음에 귀금속 정보를 저장하는 딕셔너리의 key를 가격으로, value를 무게로 잡고 key로 정렬했다.

근데 .. 이렇게 하면 문제가 있다! 같은 가격일 때 즉 key가 같을 때 무게가 덮어쓰워진다는 문제가 발생한다. 그래서 딕셔너리가 아닌 이중 배열의 형태로 귀금속 정보를 저장하였다.

values = [list(map(int, input().split())) for _ in range(n)] # n만큼 리스트 저장하여 2차원 배열 생성 [m, p]
values = sorted(values, key=lambda x: x[1], reverse=True) # p값 기준 정렬 

for m, p in values:
    if m <= w:
        answer += (p*m)
        w -= m
    else :
        answer += (w*p)
        break   
    
print(answer)

 

 

바이러스

https://softeer.ai/practice/6284

이것도 처음에 실패한 풀이.. 통과 못한 이유는 시간초과.. 그것도 꽤나 많은 테케에서의 시간초과

import sys
input = sys.stdin.readline

k, p, n = map(int, input().split())

v=k
for _ in range(n):
    v *= p

print(v%1000000007)

결국 구글링 찬스 https://softeer.ai/connect/devtalk/1465

 

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

실패 코드 K, P, N = map(int, input().split()) mod_value = 1000000007 virus = pow(P, N) virus = (K * virus) % mod_value print(virus) 성공 코드 def calculate_virus_count(K, P, N):     MOD = 1000000007     result = K     for i in range(1, N+1):

softeer.ai

ans = k
for _ in range(n):
    ans = (ans*p)%1000000007

print(ans)

연산 도중 숫자를 계속 작게 유지해주면 속도가 더 빠르다고 한다.

 

 

8단 변속기

https://softeer.ai/practice/6283

거의 레벨1에 가까웠던 문제

import sys

values = list(map(int, input().split()))

ascending = [1, 2, 3, 4, 5, 6, 7, 8]
descending = [8, 7, 6, 5, 4, 3, 2, 1]

if (values == ascending) : print("ascending")
elif (values == descending) :  print("descending")
else : print("mixed")

 

 

장애물 인식 프로그램

https://softeer.ai/practice/6282

대표적인 DFS 문제로 사실 아직 제대로 다 못풀었다. 아직까지 단순 구현 외의 알고리즘 문제가 너어ㅓ무 어렵다!

# 출처 : https://fre2-dom.tistory.com/24
import sys

# DFS로 특정 노드를 방문하고 연결된 모든 노드들도 방문
def dfs(x, y):
    # 주어진 범위를 벗어나는 경우에 즉시 종료
    if x <= -1 or x >= n or y <= -1 or y >= n:
        return False
    # 현재 노드를 아직 방문하지 않았다면
    if graph[x][y] == 1:
        # 장애물의 개수 체크
        cnt.append(1)
        # 해당 노드 방문 처리
        graph[x][y] = 0
        # 상, 하, 좌, 우의 위치들도 모두 재귀적으로 호출
        dfs(x - 1, y)
        dfs(x, y - 1)
        dfs(x + 1, y)
        dfs(x, y + 1)
        return True
    return False


# 지도 크기를 입력받는다.
n = int(sys.stdin.readline())
cnt = []
# 2차원 리스트의 맵 정보 입력 받는다.
graph = []
for i in range(n):
    graph.append(list(map(int, input())))
# 모든 노드(위치)에 대하여 장애물 블록을 만든다.
result = 0
result_list = []
for i in range(n):
    for j in range(n):
        # 현재 위치에서 DFS 수행
        if dfs(i, j) == True:
            result += 1
            # 길이를 통해 장애물의 개수 확인
            result_list.append(len(cnt))
            cnt = []

# 총 블록의 수 출력
print(result)
# 장애물의 수 오름차순 정렬 후 출력
result_list.sort()
for i in result_list:
    print(i)

참고한 블로그 1) https://khw11044.github.io/study/codingtest/2023-04-13-cote12/

 

[7일차] [Softeer] [파이썬] [Level 2] 장애물 인식 프로그램

🎀 본 게시물은 Softeer 연습문제 풀이 게시물입니다. 🎀

khw11044.github.io

참고한 블로그 2) https://fre2-dom.tistory.com/24

 

[softeer] 소프티어(파이썬): 장애물 인식 프로그램 ★★

문제 Softeer 제한시간 : C/C++(1초), Java/Python(2초) | 메모리 제한 : 128MB 입력형식 입력 값의 첫 번째 줄에는 지도의 크기 N(정사각형임으로 가로와 세로의 크기는 같으며 5≤N≤25)이 입력되고, 그 다음

fre2-dom.tistory.com

 

 

 

728x90

관련글 더보기

댓글 영역