Algorithm Problem/Python

    [python] 프로그래머스 - 위클리챌린지 7주차

    [python] 프로그래머스 - 위클리챌린지 7주차

    🤔문제 해결 각 명함을 [짧은 부분, 긴 부분] 으로 정렬 한다. 짧은 부분 최대값을 구한다. 긴 부분 최대값을 구한다. 💨 위클리 챌린지는 뭔가 한줄짜리 코드를 원하는 것 같은 문제... 💻소스 코드 def solution(sizes): return max(map(lambda x: sorted(x)[1], sizes)) * max(map(lambda x: sorted(x)[0], sizes)) 📕문제 확인 출처: 프로그래머스

    [python] 백준 - 1018. 체스판 다시 칠하기

    [python] 백준 - 1018. 체스판 다시 칠하기

    🤔문제 해결 짝수칸((i + j) % 2 == 0)과 홀수칸을 구분하여 색의 개수를 구한다. 예를 들어 짝수칸에 흰색 30, 검은색 2 홀수간에 검은색 32, 흰색 0 이 있다면 짝수칸의 검은색 2 를 흰색으로 칠하면 완벽한 체스판이 만들어진다. 반대로 짝수칸 흰색 30 을 검은색으로, 홀수칸 검은색 32 를 흰색으로 만들어도 완벽한 체스판이 되지만 62 개를 칠해야 하므로 전자가 더 최소인 경우이다. 짝수칸의 흰색 + 홀수칸의 검은색, 짝수칸의 검은색 + 홀수칸의 흰색 중 최소인 값을 계속 갱신해준다. 💻소스 코드 import sys def paint(x, y): color = [ [0, 0], [0, 0] ] for i in range(x, x + 8): for j in range(y, y + 8):..

    [python] 프로그래머스 - 위클리챌린지 7주차

    [python] 프로그래머스 - 위클리챌린지 7주차

    🤔문제 해결 방이 비어있거나 떠날 사람이 없으면 방에 사람을 계속 집어 넣는다. 떠날 사람이 있으면 방안에 있는 사람은 다 마주친 사람들 answer의 인덱스가 사람, 값이 마주친 사람들 집합이다. 방안에 있는 사람들을 각 인덱스마다 합집합 해준다. 집합의 길이 - 1 이 마주친 사람들 ( 본인 제외 ) 방을 집합으로 한 이유는 iterable 한 객체 안에 포함 관계를 확인할 때 리스트는 O(N) 이지만, 집합은 O(1) 이므로 마주친 사람들을 집합으로 한 이유는 합집합을 해주면서 중복제거하기 위해 💻소스 코드 def solution(enter, leave): N = len(enter) answer = [set()] * (N + 1) room = set() e_idx, l_idx = 0, 0 while..

    [python] 백준 - 2485. 가로수

    [python] 백준 - 2485. 가로수

    🤔문제 해결 수학 - 유클리드호제법 GCD 나무들의 간격을 구한다. 간격들의 최대 공약수를 구한다. 간격을 최대공약수로 나누고 1을 빼주면 각각의 간격 사이에 심을 나무의 숫자가 나온다. 💻소스 코드 import sys def gcd_func(a, b): while b != 0: a, b = b, a % b return a input = sys.stdin.readline N = int(input()) trees = [int(input()) for _ in range(N)] gaps = [] for i in range(1, N): # 가로수의 간격 gaps.append(trees[i] - trees[i - 1]) gaps_set = list(set(gaps)) # 간격 중복 제거 gcd = gaps_set..

    [python] 백준 - 21608. 상어 초등학교

    [python] 백준 - 21608. 상어 초등학교

    🤔문제 해결 시뮬레이션 학생: *친구들 딕셔너리를 만든다. 문제의 크기가 크지 않기 때문에 이중 포문으로 교실 전체를 탐색 좋아하는 사람 옆자리와 빈자리 개수를 각각 체크해준다. 좋아하는 사람 옆자리 수 빈자리 수 순서로 체크해가며 큰 값을 업데이트 해준다. 인덱스가 작은 값부터 탐색하기 때문에 같다면 행번호, 열번호가 작은 자리가 선택되게 된다. 다 찾았으면 교실 전체를 돌며 만족도 조사 끝 💻소스 코드 import sys input = sys.stdin.readline def is_in(ix, iy, n): if 0 max_blank): # 1. 좋아하는 사람 옆자리, 2. 같으면 빈자리 max_blank = blank max_like = like loc = i, j x, y = loc classro..

    [python] 백준 - 1347. 미로 만들기

    [python] 백준 - 1347. 미로 만들기

    🤔문제 해결 구현 좌표를 먼저 구하자. (0, 0) 에서 시작해서 제시된 행동대로 좌표로 담아준다. x좌표, y좌표 각각의 최소와 최대를 구한다. 모든 좌표들에 대해서 최소값을 더해준다. ( 음수가 나올 수 있기 때문에 양수로 바꿔주기 위해서 ) 최대 최소로 2차원 배열을 만들고, 구한 좌표로 길을 만들어준다. 💻소스 코드 import sys input = sys.stdin.readline N = int(input()) action = input().strip() # 0,0 부터 좌표 구하기 loc_list = [(0, 0)] dx, dy = [-1, 0, 1, 0], [0, 1, 0, -1] # 상 우 하 좌/ 북 동 남 서 status = 2 for a in action: if a == 'R': # ..