코딩테스트풀이 (7) 썸네일형 리스트형 23.05.18 혼자서 하는 틱택토 https://school.programmers.co.kr/learn/courses/30/lessons/160585 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명: 주어진 틱택토 판을 보고, 다음의 틱택토 규칙대로 진행되었을 때 나올 수 있는 경우인지 아닌지를 판단해야한다. 1. O가 먼저둔다. (O,X,O,X,...) 2. 가로/세로/대각선 1줄(3개)를 완성시키면 해당 인원이 승리하고 게임이 종료된다(더이상 진행되지 않음). 시도 1: 먼저 순서를 잘 지켰는지를 확인한다. 순서를 잘 지켰다면 반드시 O가 X 보다 1개 많거나, 같아야한다. .. 23.05.04 페어프로그래밍: 롤케이크 자르기 문제 설명: 롤 케이크 자르기 https://school.programmers.co.kr/learn/courses/30/lessons/132265 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 리스트가 입력으로 주어진다. 우리는 이 리스트를 앞/뒤 둘로 나누었을 때, 양쪽의 원소 종류 갯수가 같은 경우의 수를 구해야한다. 시도 1. 브루트 포스 1 - set 이용하기 for문을 이용해 1개/n-1개, 2개/n-2개, ... , n-1개/1개인 케이스를 모두 확인한다. 이때 set 를 이용해 양 측의 토핑의 중복을 제거하여 종류 갯수를 구하고, 같으면 경우.. 23.05.01 -프로그래머스:햄버거 만들기 문제: 햄버거 만들기 https://school.programmers.co.kr/learn/courses/30/lessons/133502 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명: 입력으로 1,2,3으로 이루어진 수열이 리스트형태로 주어진다. 수열에서 부분수열 1,2,3,1 이 존재하면 햄버거 갯수가 1개 추가되고 수열에서 해당 부분수열이 제거된다. 이를 반복하여 최종 햄버거 갯수를 반환하면 된다. 시도 1: find 이용하기 주어진 입력으로부터 특정 패턴을 찾아내야하는 문제이다. find는 문자열에서 특정 패턴이 존재하는지 확인하고 존재.. 코딩테스트: 모듈러 연산의 특성과 파이썬 int특성(04.07) 푼 문제: 피보나치 수, 둘만의 암호 피보나치 수(12945) 문제 이해: 반복문을 이용해 DP로 피보나치 수열을 만들어야한다. 매우 큰 입력값에도 정확한 값이 나와야한다. 시도 1: 마지막에 모듈러 연산만 하고 그냥 피보나치 수열 구하는 반복문 쓰기 def solution(n): fib=[0,1] for i in range(2,n+1): fib.append(fib[i-1]+fib[i-2]) return fib[n]%1234567 잘 작동하여 정답 처리 되었다. 근데 중간에 확인하기위해 프린트를 한번 넣어보니 다음과 같은에러를 발생 시켰다. ValueError: Exceeds the limit (4300 digits) for integer string conversion; use sys.set_int_m.. 코딩테스트: regex활용 (04.07) 신규아이디추천(72410) 문제 이해: 입력된 문자열을 정해진 규칙에 따라 변환해야하는 문제이다. 시도 1: if문과 반복문 사용하기 반복문으로 문자열을 순회하며 조건문을 통해 새로운 문자열을 만들어나가는 식으로 주어진 규칙을 구현하는 방식의 풀이를 진행하였다. def solution(new_id): sol='' answer = '.'+new_id.lower() + '.' # 맨 앞, 뒤에 . 추가(추후 설명) for s in answer: # 각 문자가 -._아닌 특문인지 확인 if s in '~!@#$%^&*()=+[{]}:?,/': continue sol+=s# 아닌 경우에만 살린다. answer=sol # 임시저장 sol='.' for s in answer: # 연속되는 . 하나만 남기기 if s.. 코딩테스트: zip() 활용 (04.06) 문제 1: 완주하지 못한 선수 찾기 문제 이해: 두개의 리스트가 주어지고 각 리스트에는 중복된 값이 들어있을 수 있다. 한쪽이 반드시 다른 한 쪽 보다 원소 갯수가 한개 많으며 그 한개 더 많은 원소를 알아내야 한다. 시도 1: 딕셔너리와 setdefault 이용해 집계 def solution(participant, completion): p_dict={} for p in participant: # 각 참가자들을 이름별로 집계 p_dict.setdefault(p,0) p_dict[p]+=1 for c in completion: # 완주한 사람의 이름의 집계횟수를 1 줄임 p_dict[c] -=1 if p_dict[c]==0: # 해당 이름의 모든 참가자가 완주했으면 아예 딕셔너리에서 꺼낸다 p_dict... 코딩테스트: 소수와 관련된 문제 3가지(04.05) 순서쌍개수, 소수찾기, 소수만들기, 3. 순서쌍 갯수 문제 이해 곱하면 주어진 자연수가 되는 모든 순서쌍의 갯수를 반환 해야한다. 순서가 다르면 다른 것이다. 시도 1. n보다 작은 모든 자연수에 대해 나뉘어 떨어지는지 체크 def solution(n): total = 0 for i in range(1,n+1): if n % (i) == 0: total += 1 return total 곱하면 n이 되는 순서쌍을 이루는 두 요소는 모두 자연수이므로, n을 두 요소로 나누면 나뉘어 떨여져 나머지가 0이 되어야한다. 이러한 성질을 이용해 n보다 작은 수 중에서 n을 나머지 없이 나누는 모든 자연수의 갯수를 순서쌍의 갯수와 동치라고 생각할 수 있다. 이 방법은 O(n)의 시간복잡도를 가진다. 해결. 체크 할 숫.. 이전 1 다음