본문 바로가기

개발/algorithm

[코드트리] 싸움땅 - Python 문제 링크 https://www.codetree.ai/training-field/frequent-problems/problems/battle-ground/description?page=1&pageSize=20 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석 국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요. www.codetree.ai 풀이 실수한 부분은 진 플레이어가 원래 가지고 있던 방향대로 이동하는 부분에서, 방향을 반대로 바꾼 플레이어는 바꾸기 전 방향으로 이동해 준 것이다. 방향을 바꾼 방향으로 이동해주어야 한다. 1. 한 칸 이동 함수 def move(): for i in range(1,m+1): x,y,d,s = pl.. 더보기
[코드트리] 코드트리 빵 - Python 문제 링크 https://www.codetree.ai/training-field/frequent-problems/problems/codetree-mon-bread/description?page=1&pageSize=20 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석 국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요. www.codetree.ai 풀이 계속 98%에서 틀렸습니다라고 떴는데, 그 이유는 격자 안 사람들 모두 편의점으로 한 칸 이동 -> 베이스 캠프로 이동 -> 도착한 베이스 캠프 & 편의점 지나갈 수 없음 해서 그런 것이었다. 문제의 조건을 만족 시키려면 아래와 같이 진행되어야 한다. 격자 안 사람들 모두 편의점으로 .. 더보기
[프로그래머스][level1] 달리기 경주 - python 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/178871 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 딕셔너리 두개 사용해서 풀이 def solution(players, callings): answer = [] n = len(players) m = len(callings) # key : 순위, value : 선수 이름 dict = {} # key : 선수 이름, value : 순위 ranks = {} # 값 초기화 for i in range(1, n+1): dict[i] = pl.. 더보기
[Python] 반올림 처리하기 - 오사오입 코테 공부를 하다가, 파이썬 내장 함수인 round 함수를 사용하다가 특이점을 발견하였다. 아래는 파이썬 round 함수 공식문서에 적혀있는 글이다. 참고 float에 대한 round() 의 동작은 예상과 다를 수 있습니다: 예를 들어, round(2.675, 2) 는 2.68 대신에 2.67 을 제공합니다. 이것은 버그가 아닙니다: 대부분의 십진 소수가 float로 정확히 표현될 수 없다는 사실로부터 오는 결과입니다. 자세한 정보는 부동 소수점 산술: 문제점 및 한계 를 보세요. 관련해서 찾아보니, 파이썬에서의 반올림은 우리가 알고있는 일반적인 반올림과 다른 결과를 보인다는 것을 알게되었다. 우리가 일반적으로 알고있는 반올림은 "사사오입", 4 이하의 숫자는 내림, 5 이상의 숫자는 올리는 방법이다. .. 더보기
[백준 12919번] A와 B 2 - python 문제 링크 https://www.acmicpc.net/problem/12919 12919번: A와 B 2 수빈이는 A와 B로만 이루어진 영어 단어 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수빈 www.acmicpc.net 풀이 처음엔 bfs로 풀이했는데, 메모리 초과가 발생했다. 이후 dfs 백트래킹으로 바꿔 풀이했는데, 시간 초과가 발생하였다. 찾아보니 이 문제의 핵심은 S에서 T로 가능한지 찾는게 아니라, T에서 S가 가능한지 찾아야 한다고 한다. S에서 T로 찾으면, 경우의 수가 너무 많아 실패한다고 한다... 이와 비슷한 문제를 이와 같은 방식이나 bfs로.. 더보기
[백준 1806번] 부분합 - python 문제 링크 https://www.acmicpc.net/problem/1806 1806번: 부분합 첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다. www.acmicpc.net 풀이 - 누적합과 투포인터로 풀이하였다. 처음엔 누적합과 이중 for문의 투포인터로 풀었더니, 시간 초과가 발생하였다. n의 최댓값이 100,000 이므로 시간 복잡도가 O(N^2)가 되어 시간 초과를 예상하였다. # 시간 초과 발생한 코드 n,s = map(int,input().split()) data = list(map(int,input().split())) dp = .. 더보기
[프로그래머스][level3] 양과 늑대 - Python 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/92343 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 - 백트래킹 문제 이진 트리 문제인가 싶었지만, dfs 사용하는 백트래킹 문제였다. 평소 재귀함수를 선호하지 않아서 그런지, 완전 탐색 백트래킹 문제임을 파악하는 것이 쉽지 않다. 양의 수와 늑대의 수를 매개변수로 넘겨주어, 양의 수가 늑대의 수와 같거나 클 때까지 반복한다. answer = 0 def dfs(sheep, wolf, edges, visited, info): glob.. 더보기
[백준 2167번] 2차원 배열의 합 - Python / 2차원 배열 누적합 문제 링크 https://www.acmicpc.net/problem/2167 2167번: 2차원 배열의 합 첫째 줄에 배열의 크기 N, M(1 ≤ N, M ≤ 300)이 주어진다. 다음 N개의 줄에는 M개의 정수로 배열이 주어진다. 배열에 포함되어 있는 수는 절댓값이 10,000보다 작거나 같은 정수이다. 그 다음 줄에는 www.acmicpc.net 풀이 기본적인 2차원 배열 누적합을 구하는 문제로, 알아두면 좋을 것 같다. 2차원 배열의 누적합의 경우, dp[i][j] = 본래값 + 왼쪽 누적합 + 오른쪽 누적합 - 대각선 누적합 으로 구할 수 있다. 특정 구간 (x1, y1) ~ (x2,y2) 까지의 누적합은 dp[x2][y2] - dp[x1-1][y2] - dp[x2][y1-1] + dp[x1-1].. 더보기