처음에 생각한 알고리즘은 굉장히 복잡하였다.맨 앞자리끼리 비교해서 내림차순으로 정렬한다.맨 앞자리가 같은 요소 중 글자길이가 작은 것을 앞에 정렬한다.(생각해보면 이 것부터 틀렸다. 50보다 588이 앞에 들어가야한다.)해당 방법으로 진행하려 했지만 알고리즘 자체가 너
citations array를 내림차순으로 sort한다.정렬된 citations의 첫번째 인덱스 값(가장 큰 값)을 h에 넣는다.citations에서 h보다 큰 요소의 개수를 cnt에 넣는다.cnt >= h인 경우 h를 return 한다.cnt < h인 경우 h-
내 풀이 모범답안 얻어갈 부분
object에 대한 api에 대해 잘 정립이 되어있지 않아 처음 로직을 짤 때 애먹었다. 특히 한 key값에 value를 2개 이상 넣어주려다 보니 배열 형태로 들어가는 상황이 발생했다.그리고 마지막 값을 도출할 때도 계산을 잘못하여 시간이 걸렸다.1\. clothes
처음에 문제 이해하는 것 부터가 난관이였다. 예시를 이해하는 것 부터가 어려워서 시간이 꽤 걸렸다. 예시를 이해하고 나서는 논리적으로 풀 수 있는 방법을 계속 고민했는데 너무 깊게 파고들다보니 문제가 어려워지기 시작했다. 결국 시간 내로 문제를 풀지 못했다.(L1: 3
내 풀이 각 배열을 뒤집는다. speeds에 해당하는 값을 각각 넣는다. 맨 끝 원소가 100 미만일 때까지 pop하고 cnt++ 3-1. temp에 pop값 넣어서 100이상이면 pop & cnt++ 3-2. 아니면 전체 반복 & cnt = 0 원소가 없으면 마무리
내 풀이 index === 0 값을 shift 한다. location위치는 맞춘다. 나머지 값들과 비교한다. 3-1. 자신보다 큰 값이 존재할 경우 맨 뒤에 push 3-2. 자신보다 큰 값이 존재하지 않을 경우 cnt++ location === 0 일 때 3-2인 경
쉬운 문제이기 때문에 논리적인 풀이보다는 객체지향적인 풀이에 집중하였다.각 수포자의 찍는 패턴을 간소화하여 switch문으로 return하는 함수를 만든다.각 수포자의 찍는 패턴과 answer를 비교하여 answerCnti++패턴을 배열 형태로 전부 저장하고 filte
내 풀이 일단 가장 먼저 순열, 조합이 생각났고 그 외에 딱히 다른 풀이법이 떠오르지 않았다. 문제 컨셉이 완전탐색인 것도 한 몫 했다. L2문제지만 1시간이 넘게 걸려 결국 풀지 못했다. numbers를 쪼개서 배열에 집어넣는다. "17" -> [1, 7] 배열의
5 x 5 2차원 배열에 무작위로 25개의 숫자로 초기화 한 후 25개의 각 요소에 대해서 그 요소와 이웃한 요소와의 차의 절댓값을 구해 총합을 구하시오벽에 있는 요소는 이웃한 요소가 없을 수 있다.각 테스트 케이스의 첫 줄에는 테스트 케이스의 번호와 배열의 행 수가
강변에 빌딩들이 옆으로 빽빽하게 밀집한 지역이 있다.이곳에서는 빌딩들이 너무 좌우로 밀집하여, 강에 대한 조망은 모든 세대에서 좋지만 왼쪽 또는 오른쪽 창문을 열었을 때 바로 앞에 옆 건물이 보이는 경우가 허다하였다.그래서 이 지역에서는 왼쪽과 오른쪽으로 창문을 열었을
한 쪽 벽면에 다음과 같이 노란색 상자들이 쌓여 있다.높은 곳의 상자를 낮은 곳에 옮기는 방식으로 최고점과 최저점의 간격을 줄이는 작업을 평탄화라고 한다.평탄화를 모두 수행하고 나면, 가장 높은 곳과 가장 낮은 곳의 차이가 최대 1 이내가 된다.평탄화 작업을 위해서 상
입력받은 배열에서 가장 큰 값과 가장 작은 값의 차를 구하여라배열을 처음부터 끝까지 돌면서큰 값을 max_result, 작은 값을 min_result에 최신화result = max_result - min_result
배열의 크기와 원소, 구간의 크기를 입력받은 후 가장 큰 구간합과 가장 작은 구간합의 차를 구하여라배열의 크기, 구간의 크기를 입력받고, 그 다음 줄에 배열 크기만의 원소를 입력받는다.배열의 가장 큰 구간합과 가장 작은 구간합의 차를 출력한다.i = 0 -> 배열 크기
0부터 9사이의 값이 적혀있는 카드가 N장 있다. 중복횟수가 가장 많은 카드의 숫자와 개수를 구하여라중복횟수가 가장 많은 카드의 개수가 같다면, 숫자가 큰 값을 구한다.첫 줄에 테스트케이스의 개수가 주어지며 그 다음 줄에 카드의 총 개수가 주어진다. 그 다음줄에는 카드
전기버스가 있다. 전기버스는 한번 충전 후 K칸 만큼 갈 수 있다. 총 가야할 거리는 N이고, 충전소의 개수는 M개이다. 충전소의 위치가 주어지고, 전기버스는 최소한의 충전을 하며 N까지의 거리를 이동할 때, 총 몇개의 충전소를 들렸는지 구하여라충전이 불가능해 N까지
부분집합 중 합이 0인 경우의 존재여부를 구하여라첫 줄에 테스트케이스의 개수가 주어지며 그 다음 줄에 10개의 원소들이 주어진다.부분집합의 합이 0인 경우가 존재할 경우 True를, 0인 경우가 존재하지 않을 경우 False를 출력한다.이진탐색을 이용한다.1\. 이진
다음 100X100의 2차원 배열이 주어질 때, 각 행의 합, 각 열의 합, 각 대각선의 합 중 최댓값을 구하는 프로그램을 작성하여라.다음과 같은 5X5 배열에서 최댓값은 29이다.총 10개의 테스트 케이스가 주어진다.배열의 크기는 100X100으로 동일하다.각 행의
문제 설명 링크 문제 풀이 빨간색 영역을 담아줄 2차원 배열 redarr과 파란색 영역을 담아줄 2차원 배열 bluearr을 생성한다. 각각의 색에 맞춰서 해당 배열에 x좌표 y좌표에 해당하는 값을 1로 바꿔준다. 10 * 10 이차원 배열을 탐색하면서 redarr
링크부분집합을 추출하는데 비트연산을 이용하였다.비트연산을 이용해 부분집합을 추출한다.추출한 부분집합을 sumArray에 넣는다.부분집합의 길이가 N이고, 부분집합의 합이 K인 경우 result++
링크이진탐색 알고리즘을 넣어준다.a, b 각각의 탐색 횟수를 cnt_a, cnt_b 에 넣어준다.a, b 모두 탐색이 완료된 경우 반복문을 빠져나간다.cnt_a, cnt_b 의 값을 비교한 후 cnt_a < cnt_b 이면 "A"를, cnt_a > cnt_b 이면
링크오름차순 정렬한다.5만큼 반복하며 큰 수 한번, 작은 수 한번 result 배열에 넣는다.내 풀이에서는 홀수일 때 마지막 수를 추가해주는 로직을 넣었는데 문제 조건이 10개만 출력하는 거라 무의미했다. 하지만 보통 내가 푼 방법의 조건이 일반적일꺼라 생각한다.
링크각 위치에서 방향과 인덱스를 고려해주어야 하기 때문에 재귀함수로 구현하였다.맨 아래의 2 원소가 있는 인덱스를 찾는다.해당 인덱스를 시작으로 재귀함수를 사용해 아래에서 위로 올라간다.올라가는 방향은 direction = 0, 왼쪽 방향은 direction = -1,
링크keys 배열에 ZRO 부터 NIN을 넣는다.입력값의 각각의 개수를 반영하는 0으로 초기화한 counts 배열을 만든다.arr 배열을 모두 탐색하면서 해당하는 countsindex++ 한다.result에 counts의 값에 해당하는 만큼 keysindex strin
입력받은 문자열을 뒤집은 문자열을 출력하라str길이의 절반까지 반복한다.str의 첫번째 값과 끝번째 값을, 그다음은 두번째값과 끝에서 두번째 값을 바꾼다.
숫자를 입력받아 문자열로 출력해라내장함수를 사용하지 않는다.입력받은 number를 10으로 나누며 나머지를 numArr 배열에 넣어준다.각 numArr값을 순회하며 아스키코드 48을 더해준다.('0'의 아스키코드가 48)result에 변환된 string값을 넣어준다.
숫자를 입력받아 문자열로 출력해라내장함수를 사용하지 않는다.입력받은 number를 10으로 나누며 나머지를 numArr 배열에 넣어준다.각 numArr값을 순회하며 아스키코드 48을 더해준다.('0'의 아스키코드가 48)result에 변환된 string값을 넣어준다.
숫자를 입력받아 문자열로 출력해라내장함수를 사용하지 않는다.입력받은 number를 10으로 나누며 나머지를 numArr 배열에 넣어준다.각 numArr값을 순회하며 아스키코드 48을 더해준다.('0'의 아스키코드가 48)result에 변환된 string값을 넣어준다.
링크index = 0 부터 palindrome길이 M하면서 str과 str을 뒤집은 string을 비교한다.palindrome이 아니면 index++ 해서 다시 탐색한다.못찾을 경우, palindrome을 찾을 때까지 100까지 1,2번 과정을 반복한다.못찾을 경우,
문제 설명 링크 문제 풀이 >
링크str2에서 str1을 문자마다 탐색한다.일치할 경우 1을 출력, 일치하지 않을 경우 str2index++부터 다시 1번 과정을 반복한다.파이썬의 슬라이싱을 잘 활용한다면 코드를 편하게 짤 수 있다.
링크str1의 중복되지 않는 set 집합을 만든다.집합의 원소를 돌며 str2의 문자와 같은지 탐색한다.처음 일치할 경우 해당 문자를 key로 가지고 value = 1인 딕셔너리를 만들고, 두번 이상 일치할 경우, 해당 문자를 key로 가지고 있는 value를 +1해준
링크A\[i]부터 A\[i + len(B\[i])]값과 B를 비교한다.일치할 경우, 반복하는 인덱스를 B의 길이만큼 더한다.위 과정을 반복한다.
문제 설명 링크 문제 풀이 lotaion 전과 후의 i, j에 대한 규칙을 찾는다. 90도를 lotaion 할 때마다 의 규칙성을 가지고 있다. > 1. 위의 작업을 하는 함수를 만든다. first, second, third에 각각 90,180, 270도 돌린 결과 배
링크문제의 흐름을 따라간다.set함수가 중복을 허용하지 않는 특징을 이용하여, 탐색 후 만들어진 set함수의 길이를 검사한다.한 행을 검사할 때마다 set함수에 넣고 길이를 비교한다음 9보다 작을 경우, result = 0하고 검사를 중단한다.1번 과정을 열, 3 \*
링크문제의 흐름을 따라갔다.문제 설명에 따라 처음에는 L, R 까지 1로 바꾸고, 그다음은 2로 바꾸고 하는 방식으로 진행했다.
링크규칙성을 찾는다.'(' 는 막대기를 추가한다. cnt += 1')' 일 때, 바로 앞이 '(' 이면 cnt -= 1, sol += cnt바로 앞이 ')' 이면 막대기가 감소한다. cnt -= 1 sol += 1
링크규칙성을 찾는다.전체 배열 요소 중 가장 큰 값이 매매 금액이 될 때까지 구매한 후 당일에 판다.팔고 그다음 index부터 max 값을 찾고 1번 과정을 반복한다.
다음과 같은 규칙에 따라 수들을 만들려고 한다.첫 번째 수로 양의 정수가 주어진다.두 번째 수는 양의 정수 중에서 하나를 선택한다.세 번째부터 이후에 나오는 모든 수는 앞의 앞의 수에서 앞의 수를 빼서 만든다. 예를 들어, 세 번째 수는 첫 번째 수에서 두 번째 수를
문제링크
문제링크함수와 변수이름을 정하는데 시간이 많이 든다.tuple, dictionary의 기본 api에 대해 익숙하지 않다.함수는 되도록 만들지 않는다.변수명을 지을 때 \_를 사용하자.tuple과 dictionary의 기본 api는 외워 놓는게 좋을 것 같다.이 메서드의
문제링크 나의 풀이 정확도는 통과했지만 효율성에서 통과하지 못했다. 다른 풀이
(문제링크)https://programmers.co.kr/learn/courses/30/lessons/72413프로그래머스 특성상 기본으로 지역변수를 사용하게 된다.global하게 사용되는 변수들을 미리 생각해 전역 처리를 한다.경로의 값을 최솟값으로 계속 바