코딩테스트

    [python] 백준 - 1105. 팔

    [python] 백준 - 1105. 팔

    🤔문제 해결 수가 20억이기 때문에 하나씩 하기에는 시간초과가 발생한다. 숫자의 범위가 주어지고, 8의 '최소' 개수를 구하라고 했다. 그러므로 각 자리수를 비교해보기로 했다. 먼저 자리수가 다른 경우에는 8의 최소 개수가 0이 된다. - 자리수가 다르면 각 자리의 수를 범위 내에서 아무거나 선택할 수 있기 때문에 자리수가 같은 경우 첫번째 자리부터 마지막으로 순차적으로 비교해본다. 각 자리가 서로 같은 8인 경우 최소 8 개수의 +1, 그리고 다음 자리 비교 각 자리가 서로 다른 경우 +0, 그리고 끝 - 뒤 자리의 숫자는 비교할 필요가 없다. 💻소스 코드 L, R = input().split() # 두 수의 자리수가 다른 경우 8이 들어가는 횟수는 최소 0이 나온다. answer = 0 if len(..

    [python] 백준 - 13023. ABCDE

    [python] 백준 - 13023. ABCDE

    🤔문제 해결 문제는 이어져있는 친구가 4명인지 물어보는 것... ( 헷갈렸다 ) 기본적인 DFS 문제이다. 중간에 조건을 줘서 잘 멈춰주기만 한다면 시간초과는 해결될 것이다. 💻소스 코드 import sys def dfs(current, cnt): global answer if answer == 1: # 답을 이미 찾았다면 dfs 멈추기 return if cnt == 5: # 답 찾았을 때 (친구가 4명) answer = 1 return visited[current] = 1 for neighbor in adj[current]: if not visited[neighbor]: dfs(neighbor, cnt + 1) visited[current] = 0 input = sys.stdin.readline ans..

    [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] 📕문제 확인 출처: 프로그..

    [javascript] 프로그래머스 - 거리두기 확인하기(2021 카카오 채용연계형 인턴십)

    [javascript] 프로그래머스 - 거리두기 확인하기(2021 카카오 채용연계형 인턴십)

    🤔문제 해결 한 방안의 모든 P에 대하여 차례로 주변을 탐색했다. 약간 BFS 느낌🤔 O를 만나면 계속탐색 P를 만나면 멈춘다. - 거리두기 지켜지지 않음 탐색 중 P에 대하여 거리가 2가 되면 더 이상 그 지점에서는 탐색을 멈춘다. 그러므로 탐색 중 다른 P를 만났다는 말은 거리가 2 이하이기 때문에 탈락 X는 무시 💨 파이썬으로 풀던 느낌으로 풀었다. break를 한번에 걸어주는 방법이 없나... 💻소스 코드 function solution(places) { var answer = []; var length = places[0].length; var dx = [-1, 1, 0, 0] // 상 하 좌 우 var dy = [0, 0, -1, 1] for (var place of places) { var ..