Algorithm(48)
-
[이코테] 상하좌우
솔직히 처음에 어려워서 책 닫고 다른 백준문제를 좀 풀어봤다. 뭔가 직접적으로 사용한건 아니지만 백준 단계별로 풀어보기 2중 배열쪽을 풀다보다 갑자기 생각나서 풀게 되었다.... 문제 조건 시작지점은 1, 1로 고정으로 오른쪽 하단 값은 (n , n) 값으로 고정한다. n 값을 넘어가면 안된다. n 값은 첫번째 줄에 입력 받는다. 이동 데이터 값은 두번째 줄에 받는다. n = int(input()) move_l = list(map(str, input().split())) point = { 'L' : (0, -1), 'R' : (0, 1), 'U' : (-1, 0), 'D' : (1, 0) } start = [1, 1] for i in move_l: p0 = start[0] + point[i][0] p1 ..
2023.03.05 -
[1978 - 파이썬] - 소수 찾기
처음 풀때는 솔직히 어렵진 않았다.... 근데 효율적이지는 않았다는 걸 깨달아 버렸다... 당연한건데 처음 반복문에서 num은 그전 숫자까지라는 기초 중 기초를 잠깐 잊어서 뻘짓을 했다 ㅋㅋ.. 처음 풀이이다 조건으로는 0~1은 소수일 수 없으니 넘겨버리고 그 외에 값들은 반복문을 이용해 나눠 떨어지면 소수가 아닌거고 아니면 아래 if 문으로 값을 받아온다. 하지만 여기서 문제점은 숫자가 커저버리면 그 수 만큼 반복해서 나누는 과정을 진행해야된다. n = int(input()) nums = list(map(int, input().split())) count = 0 for num in nums: result = True if num < 2: result = False pass else: for i in r..
2023.03.04 -
[2839 - 파이썬] - 설탕배달
조건 1 5의 몫의 값을 최대한으로 가져간다. 조건 2 5의 값이 최대치가 된다면 그 값을 3씩 빼주면서 5로 나누어 떨어질 때까지 반복한다 솔직히 생각이 길어질 수 록 너무 헷갈는 문제였다 n = int(input()) count = 0 while n >= 0: if n % 5 == 0: count += n // 5 print(count) break n -= 3 count += 1 else: print(-1)
2023.02.22 -
[2775번 - 파이썬] - 부녀회장이 될테야
솔직히 난 너무 어려웠다. 처음 풀 때는 남들이 푼 것도 다 보고해 봤지만 이해가 안 됐다. 여러 부분에 문제가 있었겠지만 기본적으로 기본 개념이 부족한 거 같았다. 이걸 보고 있다면 보기 전에 이중리스트, 파이썬 math 라이브러리에서 comb 쪽을 다시 공부하고 보는 게 좋을 거 같다. 1번 풀이 이중 리스트를 이용한 풀이 2번 풀이 라이브러리를 이용한 풀이 문제를 풀기 전에 생각해둬야되는 조건들 테스트 개수 첫줄에 입력 각층 호수를 한줄씩 입력 문제에서 0층은 0~i 라고 했으니 그 값 설정 1층 이상의 거주민 수 구하기 3, 4번의 값들을 담을 이중 리스트 구성하기 1번 이중 리스트를 이용한 풀이 방법 - 전체 코드 t = int(input()) # 테스트 케이스 수 입력받기 for _ in ra..
2023.02.22 -
[이코테] 실전문제 4번 1이 될 때까지
문제 n이 1이 될 때까지 반복한 횟수를 출력해라 조건 조건 1. n / k가 딱 떨어지는 경우 나눈다 조건 2. 아닌 경우에는 n - 1을 해준다 처음 시도 한 풀이 n,k = map(int, input().split()) result = 0 while n > 1: # n을 k로 나눴을 때 0 나오고 n이 1 보다 큰 경우 if(n % k == 0): n = n / k result += 1 else: n -= 1 result += 1 print(result) 정말한 간단한 풀이다. 근데 이런식으로 풀게되면 데이터가 큰 경우에는 매우 큰 시간이 걸린다. 슬프지만 이 코드는 사용할 수 없다. 솔직히 난 이게 맞는 줄 알고 풀었다... 문제를 풀수록 자신감이.... 책에 있는 솔루션이다... n,k = ma..
2023.02.16 -
[이코테] 실전문제 2번 큰 수의 법칙
문제 : 주어진 수들을 M번 더하여 가장 큰수를 만드는 법칙이다. 단. 배열의 특정한 인텍스에 해당하는 수가 연속으로 K번을 초과하여 더해질 수 없는 것이 이 법칙의 특징이다 첫번째 줄에는 n m k가 공백으로 자연수 구분 두번째 줄에는 n 리스트 값을 넣어준다 입력으로 주어지는 K는 항상 M보다 작거나 같다 n,m,k = map(int, input().split()) data = list(map(int, input().split())) # 리스트로 입력 받는 값을 k 번이상 똑같은 수로 반복할 수 없고 m 번반복해서 더해줘야한다 # 첫번째로는 큰수를 k번 반복 후 그다음 큰수를 찾는다 해당 인덱스 번호를 제외하고 찾기 # 첫번째로 큰수를 찾고 두번째 큰수를 찾는다 그리고 반복하는 것이 방법일 것이다 #..
2023.02.09