파이썬

    [python] 백준 - 2615. 오목

    [python] 백준 - 2615. 오목

    🤔문제 해결 6목은 안된다. 답을 출력할 때, 왼쪽 우선, 위쪽 우선 이므로 바둑돌을 기준으로 우상, 우, 우하, 하 이렇게 4방향만 고려해줬다. 먼저 바둑돌 하나를 선택하고 이 바둑돌이 끝에서 시작하는지 or 끝이 아니라면 내가 체크할 방향의 반대방향으로 상대 바둑돌이 없는지 육목 방지 위의 조건에 맞다면 내가 정한 방향으로 탐색하며 같은 색의 바둑돌을 계속 찾음 상대 바둑돌을 만나거나 바둑판 밖으로 나가면 내가 찾은 바둑돌의 개수를 체크 바둑돌을 4개 더 찾았으면 성공 아니면 실패 💻소스 코드 import sys input = sys.stdin.readline LENGTH = 19 board = [list(map(int, input().split(" "))) for _ in range(19)] # 우..

    [python] 백준 - 1052. 물병

    [python] 백준 - 1052. 물병

    🤔문제 해결 S1 | 이진법 물의 양이 1, 2, 4, 8, 16, ... 이렇게 증가하므로 이진수처럼 생겼다. 같은 수를 더하면 다음 수 하나가 나온다. 이진수로 보면 ex) 100 + 100 = 1000 예시로 설명해보자면 N = 11 일 때 물병: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 물병합: 2, 2, 2, 2, 2, 1 물병합: 4, 4, 2, 1 물병합: 8, 2, 1 물병은 결국 3개가 된다. 11을 이진수로 바꾸면 1011 이다. 결국 1의 개수가 다 합쳤을 때의 물병의 개수가 된다. 그럼 1의 개수를 줄이고 싶으면 이진수 덧셈을 이용한다. 1011(11) + 0001(1) => 1100(12) 1100(12) + 0100(4) => 10000(16) 🚀 이진수를 잘 이..

    [python] 프로그래머스 - 이진 변환 반복하기(월간 코드 챌린지 시즌1)

    [python] 프로그래머스 - 이진 변환 반복하기(월간 코드 챌린지 시즌1)

    🤔문제 해결 '0'이 제거된 갯수도 필요하기 때문에 '0'의 개수를 저장 s의 길이에서 0의 개수를 빼주면 '1'로 구성된 s의 길이가 나옴 그 길이를 2진법으로 표현 1-3 반복 💨 아마 월코챌 1번 문제였던거 같다. 💻소스 코드 def solution(s): cnt, removed_zero_cnt = 0, 0 while s != '1': # 1. x의 모든 0을 제거한다. zero_cnt = s.count('0') # 2. x의 길이를 c라고 하면, x를 "c를 2진법으로 표현한 문자열"로 바꾼다. s = bin(len(s) - zero_cnt)[2:] cnt += 1 removed_zero_cnt += zero_cnt return [cnt, removed_zero_cnt] 📕문제 확인 출처: 프로그..

    [python] 프로그래머스 - 다단계 칫솔 판매(2021 Dev-Matching: 웹 백엔드 개발자(상반기))

    [python] 프로그래머스 - 다단계 칫솔 판매(2021 Dev-Matching: 웹 백엔드 개발자(상반기))

    🤔문제 해결 판매원을 키, 추천인과 수익을 밸류로 하는 딕셔너리를 만든다. (enroll, referral) 칫솔을 판매한 사람을 선택하고, 추천인과 수익을 계속 나눈다. 💨 보통 이렇게 하면 마지막 3개의 케이스에서 시간초과가 발생한다. 그 이유는 수익을 더 이상 나눌 수 없는 상태여도 추천인을 따라서 0원의 수익을 나눠 갖는 척을 하기 때문 따라서 더 이상 수익을 나눌 수 없는 상황이 되면 반복문을 멈춰준다. 💻소스 코드 def solution(enroll, referral, seller, amount): answer = [] multistages = {'-': ['', 0]} for e, r in zip(enroll, referral): multistages[e] = [r, 0] for s, a i..

    [python] 프로그래머스 - 약수의 개수와 덧셈

    🤔문제 해결 1. 나의 풀이 약수의 개수를 구하는 방법: 소인수 분해를 하고, 그 거듭제곱에 +1을 하면 약수가 나온다. 거듭제곱이 2개 이상이라면, 각각의 거듭제곱에 +1을 하고 그 숫자들을 서로 곱해준다. 2. 다른 좋은 풀이 모든 숫자는 약수의 개수가 짝수개이다. 예외로 제곱수는 약수의 개수가 홀수이다. 제곱이기 때문... 💨 디폴트딕트와 리듀스까지 써가면서 열심히 풀었지만, 수학을 잘하면 저렇게 쉽게 풀 수 있다....😜 💻소스 코드 from collections import defaultdict from functools import reduce def solution(left, right): """ 약수의 개수를 구하는 방법: 소인수 분해를 하고, 그 거듭제곱에 +1을 하면 약수가 나온다. 거..

    [python] 프로그래머스 - 음양 더하기

    [python] 프로그래머스 - 음양 더하기

    🤔문제 해결 signs 가 True 이면 더하고, False 이면 빼준다. 💻소스 코드 def solution(absolutes, signs): answer = 0 for i in range(len(absolutes)): if signs[i] is True: answer += int(absolutes[i]) else: answer -= int(absolutes[i]) return answer 📕문제 확인 출처: 프로그래머스 링크: https://programmers.co.kr/learn/courses/30/lessons/76501?language=python3 코딩테스트 연습 - 음양 더하기 어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차..