알고리즘

· 알고리즘
📌 더보기 # problem: https://www.inflearn.com/course/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8 5 3 1 2 8 4 9 ✔️ code import sys sys.stdin=open("input.txt", "r") #말이 들어갈 수 있는 마구간 수를 세는 함수 def Count(len): cnt=1 #이미 한마리는 들어가 있다. a=Room[0] for i in range(1, N): if Room[i]-a>=len: cnt+=1 a=Room[i] re..
· 알고리즘
📍 이분 탐색 사용 📌 더보기 # problem: https://www.inflearn.com/course/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8 9 3 1 2 3 4 5 6 7 8 9 # solve 9개의 비디오를 3개의 DVD에 나누어야 한다. 답의 범위를 먼저 설정해야 한다. input에 따라 답은 1~모든 동영상 길이 합 사이에 있다. 1~45 사이에서 DVD를 3개 이상 만들 수 있는 DVD 1개 길이의 최소 용량을 구해야 한다. 예를 들어 DVD 최소 용량이 23분이라면 ..
· 알고리즘
✔️ code def solution(s): answer = s #숫자와 영단어 매칭 number_dict={'zero':0, 'one':1, 'two':2, 'three':3, 'four':4, 'five':5, 'six':6, 'seven':7, 'eight':8, 'nine':9} for key, value in number_dict.items(): if answer.find(key)!=-1: #만약 key 를 answer에서 발견한다면, (반환값이 정상) answer=answer.replace(key, str(value)) return int(answer) >>> 지금 보니 0~9 를 설정할 때 string 형으로 해주는게 편할 수도 있을 것 같다. 바로 replace()를 사용해도 되는데 fin..
· 알고리즘
✔️ code import re def solution(new_id): answer = list() #1단계: 소문자 치환 new_id=new_id.lower() #2단계: 특정 문제 제외 모든 문자 제거 symbols=['-', '_', '.'] new_string=re.sub(r"[^a-zA-Z0-9]","",new_id) #new_id에서 문자와 숫자만 남기기 for i in new_id: if i not in symbols: if i not in new_string: new_id=new_id.replace(i, "") #3단계: 마침표 2번 연속 하나로 치환 for i in range(len(new_id)): if new_id[i]==".": if i+1!=len(new_id) and new_id..
· 알고리즘
📍 이분검색 검색 범위를 반으로 줄여가며 찾는 방법 자료를 반으로 나누어 반만 탐색하는 것으로 특정 범위 내에 답이 있다는 것이 특징이다 ex) 1~1000 에 해당하는 자료가 있을 때, ① 1~500 / 501~1000 으로 나누고 원하는 output이 1~500 범위 내에 있다면 ② 1~500 을 1~250 / 251~500으로 나누고 원하는 output이 251~500 범위 내에 있다면 … 이를 반복하는 탐색이다. 이때 시작 위치와 종료 위치가 변화하기 때문에 코드를 짤 때 주의해야 한다. 📌 더보기 # problem: https://www.inflearn.com/course/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%..
· 알고리즘
📌 1부터 9까지의 자연수로 채워진 7*7 격자판이 주어지면 격자판 위에서 가로방향 또는 세로방향으로 길이 5자리 회문수가 몇 개 있는지 구하는 프로그램을 작성하세요. 회문수란 121과 같이 앞에서부터 읽으나 뒤에서부터 읽으나 같은 수를 말합니다. 2 4 1 5 3 2 6 3 5 1 8 7 1 7 8 3 2 7 1 3 8 6 1 2 3 2 1 1 1 3 1 3 5 3 2 1 1 2 5 6 5 2 1 2 2 2 2 1 5 ✔️ code import sys sys.stdin=open("input.txt", "r") arr=[list(map(int, input().split())) for _ in range(7)] #7x7 matrix cnt=0 #행->열 탐색 #첫 원소부터 다음 5번째까지..
· 알고리즘
📌 각 행에 1부터 9까지의 숫자가 중복 없이 나오고, 각 열에 1부터 9까지의 숫자가 중복 없이 나오고, 각 3×3짜리 사각형(9개이며, 위에서 색 깔로 표시되었다)에 1부터 9까지의 숫자가 중복 없이 나오면 스도쿠를 정확하게 푼 경우이다. 완성된 9×9 크기의 수도쿠가 주어지면 정확하게 풀었으면 “YES", 잘 못 풀었으면 ”NO"를 출 력하는 프로그램을 작성하세요. 1 4 3 6 2 8 5 7 9 5 7 2 1 3 9 4 6 8 9 8 6 7 5 4 2 3 1 3 9 1 5 4 2 7 8 6 4 6 8 9 1 7 3 5 2 7 2 5 8 6 3 9 1 4 2 3 7 4 8 1 6 9 5 6 1 9 2 7 5 8 4 3 8 5 4 3 9 6 1 2 7 ✔️ code import sy..
· 알고리즘
✔️ code def solution(id_list, report, k): #유저 ID 딕셔너리화 id_dict=dict.fromkeys(id_list, 0) answer=dict.fromkeys(id_list, 0) #신고 중복 제거 report_set=set(report) report=list(report_set) for i in report: #신고당한 유저 i=i.split()[1] #유저ID에 해당하는 key값과 비교하여 신고당한 횟수를 누적 if i in id_dict: id_dict[i]+=1 #만약 value가 k이상이라면 정지 대상 for j in report: if id_dict[j.split()[1]] >= k: #정지 유저를 신고한 유저의 값 증가 answer[j.split()[0]..
· 알고리즘
📌 지도 정보가 N*N 격자판에 주어집니다. 각 격자에는 그 지역의 높이가 쓰여있습니다. 각 격자 판의 숫자 중 자신의 상하좌우 숫자보다 큰 숫자는 봉우리 지역입니다. 봉우리 지역이 몇 개 있는 지 알아내는 프로그램을 작성하세요. 격자의 가장자리는 0으로 초기화 되었다고 가정한다. 만약 N=5 이고, 격자판의 숫자가 다음과 같다면 봉우리의 개수는 10개입니다. 📌 input 5 5 3 7 2 3 3 7 1 6 1 7 2 5 3 4 4 3 6 4 1 8 7 3 5 2 📍 1: 주어진 matrix 가장자리를 어떻게 0으로 초기화 할 것인가? 2: 상하좌우 숫자와 자신을 어떻게 비교할 것인가? ✔️ 내가 짠 코드 import sys sys.stdin=open("input.txt", "r") n=int(inpu..
· 알고리즘
📌 현수는 곳감을 만들기 위해 감을 깍아 마당에 말리고 있습니다. 현수의 마당은 N*N 격자판으 로 이루어져 있으며, 현수는 각 격자단위로 말리는 감의 수를 정합니다. 그런데 해의 위치에 따라 특정위치의 감은 잘 마르지 않습니다. 그래서 현수는 격자의 행을 기준으로 왼쪽, 또는 오른쪽으로 회전시켜 위치를 변경해 모든 감이 잘 마르게 합니다. 만약 회전명령 정보가 2 0 3이면 2번째 행을 왼쪽으로 3만큼 아래 그림처럼 회전시키는 명령 입니다. index 0: 행 index 1: 0(왼쪽) 1(오른쪽) index 2: 이동 횟수 ex ) 203 일 경우, 12 39 30 23 11 행을 왼쪽으로 3만큼 회전한다. 23 11 12 39 30이 된다. 📌 input 5 10 13 10 12 15 12 39 3..
오승미
'알고리즘' 카테고리의 글 목록 (4 Page)