본문 바로가기

백준107

[Python3] 백준 1072번 게임 사용 언어 - Python3 문제 - 게임 1072번: 게임 김형택은 지금 몰래 Spider Solitaire(스파이더 카드놀이)를 하고 있다. 형택이는 이 게임을 이길 때도 있었지만, 질 때도 있었다. 누군가의 시선이 느껴진 형택이는 게임을 중단하고 코딩을 하기 시 www.acmicpc.net 정답 이분 탐색 문제 (정답 맞춘 여부 X) 1. 파이썬에서 소숫점 버린 승률 구하기 (Y//X)*100 파이썬에서 부동소숫점 오차로 오류! Z = (Y*100)//X 사용! 2. 예외 처리 형택이는 앞으로의 모든 게임에서 지지 않기 때문에 x+1, y+1이다. 만약 x==y 라면, x//y=100이고 x+1==y+1이라 Z값이 항상 같다. 절대 변하지 않는다. z가 99 이상이면 print(-1)을 출력해준다... 2023. 4. 4.
[Python3] 백준 1004번 어린 왕자 사용 언어 - Python3 문제 - 어린 왕자 1004번: 어린 왕자 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 첫째 줄에 출발점 (x1, y1)과 도착점 (x2, y2)이 주어진다. 두 번째 줄에는 행성계의 개수 n이 주 www.acmicpc.net 정답 출발/도착점-행성계 단순 계산 문제 (정답 맞춘 여부 X) 1. "제곱"을 통해 반지름 크기 비교 행성계 반지름 vs 출발점, 행성계 x 반지름 행성계 반지름 vs 도착점, 행성계 y 반지름 행성계 반지름보다 안에 있으면 카운트+=1 T=int(input()) for _ in range(T): x1, y1, x2, y2 = list(map(int,input().split())) #출발점, 도착점.. 2023. 4. 2.
[Python3] 백준 1063번 킹 사용 언어 - Python3 문제 - 킹 1063번: 킹 8*8크기의 체스판에 왕이 하나 있다. 킹의 현재 위치가 주어진다. 체스판에서 말의 위치는 다음과 같이 주어진다. 알파벳 하나와 숫자 하나로 이루어져 있는데, 알파벳은 열을 상징하고, 숫자는 www.acmicpc.net 정답 위치 이동시키는 nx,ny 문제 (정답 맞춘 여부 X) 1. ord("A") = 64 외우자 2. 딕셔너리를 이용하여 방향 move 설정 king, stone, N = input().split() k = list(map(int, [ord(king[0]) - 64, king[1]])) s = list(map(int, [ord(stone[0]) - 64, stone[1]])) move = {'R': [1, 0], 'L': [-1,.. 2023. 3. 31.
[백준] 24060번 알고리즘 수업 - 병합 정렬 1 사용 언어 - Python3 백준 24060번: 알고리즘 수업 - 병합 정렬 1 (실버4, 정렬) 문제 ★병합 정렬 문제★ 24060번: 알고리즘 수업 - 병합 정렬 1 첫째 줄에 배열 A의 크기 N(5 ≤ N ≤ 500,000), 저장 횟수 K(1 ≤ K ≤ 108)가 주어진다. 다음 줄에 서로 다른 배열 A의 원소 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 109) www.acmicpc.net 정답 병합 정렬(분할 정복 알고리즘) 문제 (코드 풀이) 병합 정렬 의사 코드에서 추가되는 포인트 정리 0. merge_sort(), merge() 굳이 분리할 필요 없음 1. len(L)이 1이라면 정렬할 게 없으므로 return L 2. mid = ((len(L)+1)//2 45 132가 아.. 2023. 1. 31.
[백준] 25501번 재귀의 귀재 사용 언어 - Python3 25501번: 재귀의 귀재 (브론즈2, 재귀) 문제 ★재귀 문제★ 25501번: 재귀의 귀재 각 테스트케이스마다, isPalindrome 함수의 반환값과 recursion 함수의 호출 횟수를 한 줄에 공백으로 구분하여 출력한다. www.acmicpc.net 정답 문제에 나온 코드를 파이썬으로 구현하는 문제 (코드 풀이) recursion 함수에서 문자열s의 첫(0) 문자와 끝(len(s)-1) 문자가 같은지 재귀적으로 계속 비교한다. 비교하려는 문자열의 인덱스들이 뒷문자가 더 인덱스가 작다면, 1을 return한다. 첫 문자와 끝 문자가 같지않다면, 0을 return한다. 첫 문자와 끝 문자가 같다면, 그 다음 문자들을 비교한다. recursion(s,l+1,r-1) # 정답.. 2023. 1. 23.
[백준] 10872번 팩토리얼 사용 언어 - Python3 10872번: 팩토리얼 (브론즈5, 재귀) 문제 ★재귀 문제★ 10872번: 팩토리얼 0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오. www.acmicpc.net 정답 재귀 함수 또는 for문으로 처리하기 (코드 풀이) 1. 정답1 - 재귀함수 def factorial(n) 재귀함수 정의하기 n이 0보다 클때만 result = n*factorial(n-1) # 정답1 n = int(input()) def factorial(n): result = 1 if n > 0 : result = n * factorial(n-1) return result print(factorial(n)) 2. 정답2 - for문 n이 0보다 클때만 i를 한개씩 증가.. 2023. 1. 23.
[백준] 12015번 가장 긴 증가하는 부분 수열 2 사용 언어 - Python3 120154번: 덱 (골드5, 큐) 문제 ★이분 탐색 문제★ 12015번: 가장 긴 증가하는 부분 수열 2 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000,000) www.acmicpc.net 정답 이분탐색으로 시간복잡도 O(nlogn) 개선 (코드 풀이) ans=[0] 리스트에 값 비교하면서 append 해주기 ans[-1] ans의 가장 마지막 값이 i보다 작으면 ans에 append해준다. 그렇지 않다면, 이분탐색으로 인덱스 mid값을 조정해준다. ans[mid]가 i보다 작으면 start = mid+1, i보다 크면 end = mid로 범위를 업데이트해준다... 2023. 1. 23.
[백준] 5430번 AC 사용 언어 - Python3 5430번: 덱 (골드5, 큐) 문제 ★큐 문제★ 5430번: AC 각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다. www.acmicpc.net 정답 큐 reverse 처리하기 (코드 풀이) 1. 입력 형태 주의하기 input 형태가 [1,2,3,4]이다. 우리는 deque의 입력값으로 '1','2','3','4'를 넣기 위해 데이터를 가공해줘야한다. 앞과 끝의 대괄호 []는 없애고, 컴마(,)로 split하여 인식하여 deque의 입력값을 넣어준다. 2. 시간복잡도 reverse 해결하기 R 함수는 전체 큐를 q.reverse() 해야하기 때문에 시간 초과된다. reverse 해주.. 2023. 1. 22.
[백준] 1021번 회전하는 큐 사용 언어 - Python3 10866번: 덱 (실버4, 큐) 문제 ★큐 문제★ 1021번: 회전하는 큐 첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가 www.acmicpc.net 정답 deque([]) 사용하기 (코드 풀이) 위치값이 큐의 첫번째 원소와 같으면 큐 앞에 있는 원소를 pop한다. q의 i번째 위치값 q 길이의 절반 인 경우, 맨 오른쪽의 원소를 q의 맨 앞으로 appendleft 한다. q의 첫.. 2023. 1. 22.
[백준] 10866번 덱 사용 언어 - Python3 10866번: 덱 (실버4, 큐) 문제 ★큐 문제★ 10866번: 덱 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 정답 deque([]) 사용하기 (코드 풀이) 큐의 맨 앞(왼쪽)에 push => q. appendleft 큐의 맨 앞(왼쪽에 pop => q.popleft q는 앞선 명령어들로 길이가 계속 달라지므로 인덱싱할 때 주의해야한다. 가장 오른쪽 값 출력 => d[len(d)-1] # 정답 import sys from collections import deque d = de.. 2023. 1. 22.