[파이썬] n진수 변환 / 재귀 change={0:'0',1:'1',2:'2',3:'3',4:'4',5:'5',6:'6',7:'7',8:'8',9:'9',10:'A',11:'B',12:'C',13:'D',14:'E',15:'F'} def solution(num,n): if num//n == 0: return change[num%n] return solution(num//n,n)+change[num%n] n 코딩테스트 연습 2023.03.22
[파이썬] 프로그래머스: 가장 큰 수 / 아스키코드 문자열도 비교연산이 가능하다. 각각의 문자는 아스키코드값을 가지기 때문이다. 따라서 sort함수로 정렬도 가능하다. 단 두 문자열의 길이가 다를 경우, 짧은 문자열이 끝나는 지점에서 비교가 끝난다. 그래서 아래 문제는 각 문자열에 임의로 *3을 해서 정렬을 수행했다. 예를 들어 3과 35가 있을 때 어떤 수가 앞으로 와야 더 큰 수를 만들 수 있을지 보았을 때 각 문자열을 3번 반복하여 비교하면 333과 353535로 비교하게 되는데 더 짧은 문자열이 끝나는 곳에서 비교가 종료되므로 결국 333 < 353 이 되어 35가 앞에있어야 더 큰 수를 만들 수 있다는 결론이 나온다. def solution(numbers): numbers = list(map(str, numbers)) numbers.sort(ke.. 코딩테스트 연습 2023.03.21
[파이썬] 프로그래머스: 셔틀버스 우선 70.8점 짜리 망한 코드부터 보여드립니다. 모든 경우의 수를 고려했다고 생각했으나, 여기서 더 수정하면 너무 장황하여 이건 아닌 것 같다고 느낌이 왔다. def solution(n, t, m, timetable): waiting=[] for i in timetable: time=list(map(int,i.split(':'))) waiting.append(time[0]*60+time[1]) waiting.sort() # 하루에 1회(9시 첫차) 운행시 if n==1: # 9시에 정원보다 많이 와있을 떄 if len(waiting)>=m and waiting[m-1] 코딩테스트 연습 2023.03.21
[파이썬] 프로그래머스: 파일명 정렬 / 정규식, split, 구분자유지 HEAD, NUMBER, TAIL은 중간의 NUMBER 기준으로 갈라진다. 따라서 split과 숫자 정규식을 활용해 구간을 나누고 HEAD 기준으로 첫번째, NUMBER 기준으로 두번째 총 두 번 정렬을 수행한 뒤 나누어진 구간들을 join으로 합쳐 하나의 파일명으로 만들고 정렬된 파일명 리스트를 반환한다. import re def solution(files): temp = [re.split(r"([0-9]+)", s) for s in files] print(temp) sort = sorted(temp, key = lambda x: (x[0].lower(), int(x[1]))) return [''.join(s) for s in sort] point1. split을 수행하면 결과물은 list에 담겨 나온.. 코딩테스트 연습 2023.03.21
[파이썬] 프로그래머스: 카드뭉치 goals의 단어를 하나씩 돌면서 card1또는 cards2 뭉치의 맨앞 단어와 일치하는지 확인하고 일치한다면 삭제하여 다음 단어가 맨 앞으로 오게 만들어준다. 카드 뭉치 내에서 순서를 바꿔 탐색할 필요가 없으므로 두 카드뭉치 모두 이용할 수 없다면 바로 No를 출력하고 종료하도록 한다. def solution(cards1, cards2, goal): for i in goal: if len(cards1) and i == cards1[0]: del cards1[0] elif len(cards2) and i == cards2[0]: del cards2[0] else: return 'No' return 'Yes' point1. 조건문에서 각 카드 뭉치가 비어있지는 않은지 미리 확인하기 위해 len(cards1.. 코딩테스트 연습 2023.03.21
[파이썬] 프로그래머스: 과일 장수 최대 이익값을 반환하기 위해 주어진 과일 점수를 높은순으로 정렬하고, 앞에서 m개씩 끊어가며 규칙에 따른 해당 박스의 이익을 answer에 누적한다. 단, 마지막 박스에 m개가 가득 차지 않을 경우 연산을 수행하지 않기 위해서 while문으로 중단 조건을 선제시해준다. def solution(k,m,score): answer=0 start, end = 0, m score.sort(reverse=True) while (len(score[start:end]) == m): answer += (min(score[start:end])*m) start += m end += m return answer 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, .. 코딩테스트 연습 2023.03.21
[파이썬] 프로그래머스: 삼총사 / 조합 조합을 활용한 기초적인 문제이다. 이 문제는 조합 원소의 개수가 크지 않고 3으로 고정되어 있어 구현이 쉽다. 원소 개수만큼 for문을 돌려 체크해볼 인덱스를 뽑으면 된다. 모든 조합을 돌면서 합이 0이면 count를 1 올려준다. def solution(number): answer = 0 for i in range(len(number)-2): for j in range(i + 1, len(number)-1): for k in range(j + 1, len(number)): if number[i] + number[j] + number[k] == 0: answer += 1 return answer 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하.. 코딩테스트 연습 2023.03.20
[알고리즘]DFS, BFS 연습문제 DFS & BFS 예제 1. 얼음 문제 N X M 크기의 얼음 틀이 있다. 구멍이 뚫려 있는 부분은 0, 칸막이가 존재하는 부분은 1로 표시된다. 구멍이 뚫려있는 부분끼리 상, 하, 좌, 우로 붙어있는 경우 서로 연결되어 있는 것 doyyy.tistory.com 코딩테스트 연습 2023.03.15
[python/C++] 가장 큰 정사각형 찾기 / 동적 프로그래밍(DP) 가장 큰 정사각형 찾기 : 동적 프로그래밍(dp)#includeusing namespace std;int dp[1001][1001]={0};int solution(vector> board){ int ans=0; int row = board.size(); int col = board[0].size(); for(int i = 1; i def solution(board): n = len(board) m = len(board[0]) # dp 준비 dp = [[0]*m for _ in range(n)] dp[0] = board[0] for i in range(1,n): dp[i][0] = board[i][0] # 2중 for문으로 연산 .. 코딩테스트 연습 2023.03.11
[파이썬] 프로그래머스: 문자열 나누기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr text = list(input()) x = text[0] cnt_x=0 cnt_diff=0 result=0 i = 0 while True: try: if x == text[i]: cnt_x += 1 else: cnt_diff +=1 if cnt_x == cnt_diff: print(''.join(text[0:i+1]), end=' - ') text[0:i+1]='' #해당 위치까지의 텍스트 삭제 result += 1 cnt_x = 0 cnt_diff = 0 i=0 x=text[0] else: i += 1 i.. 코딩테스트 연습 2023.02.23