본문 바로가기

분류 전체보기109

백준 실버1 1931. 회의실 배정 (python) 회의실 풀이 문제를 보고 어떻게 할까 구상하다가 처음에는 사용하고 있는 모든 시간을 기록하는 리스트 변수를 생성할까 하다가 굳이 그럴 필요는 없다고 생각되었다. 이유는 현재 회의의 종료 시간이 다음 회의의 시작 시간보다 늦으면 다음 회의는 할 수 없고, 현재 회의의 종료 시간이 다음 회의의 시작시간보다 일찍이면 다음 회의를 시작할 수 있기 때문이다. 이를 이용하는 것을 재귀함수를 이용해서 진행하기 위해 아래처럼 진행을 해봤다. 하지만 시간 초과가 발생했다. # 한 개의 회의실. 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 갯수. import sys def check_maxuse(nums, use_time, i): global max_use if max_use < nums: max_.. 2024. 3. 2.
백준 실버4 11399. ATM (python) ATM 풀이 문제를 찬찬히 읽으면 금방 해결되는 문제이다. 처음에는 섞든 다 똑같은 것 아닌가 생각했는데 그게 아니라 5 사람이 있으면 1번째 사람이 걸린 시간 2번째 사람이 걸린 시간 3번째 사람이 걸린 시간 4번째 사람이 걸린 시간 5번째 사람이 걸린 시간 의 합이 최소화가 되는 것을 구하는 것이다. 따라서 이것은 오름차순으로 정렬시킨 다음에 슬라이싱을 적용하든 뭘 하든 sum(list [:나+1])들의 합이라고 생각하면 된다. 나는 슬라이싱은 시간이 더 걸릴 것이라 생각했기에 시간을 누적시키는 방법을 사용했다. 따라서 코드는 다음과 같다. import sys N = int(sys.stdin.readline().strip()) p_list = list(map(int, sys.stdin.readline.. 2024. 3. 2.
백준 실버4 1764. 듣보잡 (python) 듣보잡 풀이 문제를 보고 바로 작성해서 아래처럼 풀었다. 듣지 못해본 사람 보지 못해본 사람 의 명단을 받아서 중복되는 사람인 듣도보도못한사람을 사전순으로 출력하는 것이다. 따라서 각 입력받고 순서대로 중복되는지 확인하는 방법을 사용했다. 그러나 시간 초과가 발생했다. import sys N, M = map(int, sys.stdin.readline().split()) unknown_heard = [] unknown_look = [] for _ in range(N): unknown_heard.append(sys.stdin.readline().strip()) for _ in range(M): unknown_look.append(sys.stdin.readline().strip()) unknown_look_h.. 2024. 3. 2.
백준 실버2 1012. 유기농 배추 (python) 유기농 배추 풀이 dfs 문제를 풀기 위해 백준에서 dfs 카테고리로 문제를 찾았고 유기농 배추를 맞이했다. 보통 N,M의 방식으로 줄텐데 여긴 왜 M, N으로 주는지 모르겠지만, 잘 받고 코드에 입력했다. 해당 문제는 bfs또는 dfs로 풀 수 있는데 우선 dfs로 먼저 풀어봤고 아래처럼 풀었다. 입력값 받기 1. board와 visited 생성 및 몇 개의 군락이 있는지 확인할 count 변수 생성 2. 위치를 순회하면서, 배추가 있고, 해당 배추를 확인하지도 않았다면, dfs를 진행! 3. dfs 함수 내에서 stack을 생성하고, 이 stack을 이용해서 진행 -> stack에 값이 존재하는 동안 해당 위치에서 4방향을 확인하고, 해당 위치에 배추가 있고, 확인 안 했으면, 계속해서 진행하는 방식.. 2024. 3. 1.
SWEA D3 20019. 회문의 회문 (python) 회문의 회문 풀이 문제는 일단 회문이다. 그런데 회문 안에서 또 회문이 있어야한다. 문제에서 적힌 것을 그대로 실행해주면된다. S는 회문이다. S의 처음 (N-1)/2글자가 회문이다. S의 마지막 (N-1)/2글자가 회문이다. 이 조건을 만족시켜주면 되고, python에서는 아주 간단하게 코드를 구성해서 만들 수 있다. def solution(S): # 회문일 때 시작 N = len(S) if S == S[::-1]: if S[:N//2] == S[:N//2][::-1] and S[N//2+1:] == S[N//2+1:][::-1]: return 'YES' else: return 'NO' return 'NO' T = int(input()) for testcase in range(1, T+1): S = i.. 2024. 3. 1.
SWEA D3 10570. 제곱 팰린드롬 수 (python) 제곱 팰린드롬 수 풀이 정말 간단하게 풀었다. for에 if에 if에 if를 사용해 봤다. 나 자신이 회문이 어야 하고, 루트값도 회문이 어야 하기 때문에 이렇게 사용했다. 2번째 if문은 루트값이 정수로 떨어지는지 확인하기 위해 사용했다. T = int(input()) for testcase in range(1, T+1): A, B = map(int,input().split()) tenet = [] for N in range(A, B+1): if str(N) == str(N)[::-1]: if N**0.5 == int(N**0.5): if str(int(N**0.5)) == str(int(N**0.5))[::-1]: tenet.append(N) print(f'#{testcase} {len(tenet)}') 2024. 3. 1.