본문 바로가기

알고리즘

[programmers] 문자열 다루기 기본 코드 def solution(s): if len(s) == 4 or len(s) == 6: for i in s: if not i.isdigit(): return False return True else: return False 주의할 점 1. isdigit으로 확인가능 -> 이때 not i.isdigit()이여야 return False일때 괜찮 -> i.isdigit()이면 return True라 한번 True되면 바로 return이 되므로 안됨 2. 원래는 0 더보기
[programmers] 문자열 내 마음대로 정렬하기 풀이방법 1. 처음에는 dictionary에 key, value값으로 넣으려했는데 문제 발생 string[i][n]이 중복이 된다면, 처음 값은 마지막 값으로 바뀌고 마지막 값만 남음 -> {'c' : ['abce', 'abcd'], 'x': 'cdx'} 해서 key값 기준으로 sort하고, c 안에서 sort할 수도 있는데, 이렇게 된다면 {'c' : 'abce', 'x' : 'cdx', 'a' : 'etac'}일때랑 굳이 구분해야함 2. 그래서 내린 결론! -> 그냥 string[i]앞에 string[i][n]붙여서 sort시키고 answer이라는 리스트에 string[i][1:]넣기 코드 def solution(strings, n): for i in range(len(strings)): string.. 더보기
[programmers] 완주하지 못한 선수 풀이방법1. hash def solution(participant, completion): dic = {} res = 0 for part in participant: dic[hash(part)] = part res += hash(part) for com in completion: res -= hash(com) ans = dic[res] # key값을 넣은거니까 value값(이름)이 나온다 return ans hash는 dictionary처럼쓰는데, 실행할때마다 key값에 새로운 숫자를 제공 ex. {1543287362802119979: 'leo', -599470287568687192: 'kiki', -5395674906811354268: 'eden'} {8023414173644665412: 'leo', .. 더보기
[programmers] 주식가격 로직 작성 1. 첫번째 값이랑 2, 3, 4, 5번째 값이랑 비교하기! 2. 비교할 때, for i in range(len(price)-1)이여야함 -> why? 마지막 값은 다음값이랑 비교할게 없음 -> 그래서 cnt = [0 for _ in range(len(prices))] 맨 처음부터 0으로 두는 것이다. 코드 def solution(prices): cnt = [0 for _ in range(len(prices))] for i in range(len(prices) - 1): for j in range(i+1, len(prices)): if prices[i] i는 마지막 전값까지, j는 마지막 값까지 가야함 -> j는 i 바로 다음 값부터 시작해야함 더보기
[baekjooon] 5014. 스타트링크 로직 설명 1. 한 단계씩 나아가면서 cnt +=1을 하고, q에 G가 들어있으면 stop ex. 1 - 3 - 2 - 1 - 4 - 5 - 4 - 7 cnt : 1 2 3 코드 import collections F, S, G, U, D = map(int, input().split()) def bfs(): if S > G and D == 0: return "use the stairs" elif S < G and U == 0: return "use the stairs" q = collections.deque([(S, 0)]) visit = [0 for _ in range(F + 1)] visit[S] = 1 while q: x, cnt = q.popleft() if x == G: return cnt if .. 더보기
[baekjoon] 7569. 토마토 코드 import collections M, N, H = map(int, input().split()) board = [[list(map(int, input().split())) for _ in range(N)] for _ in range(H)] near = [(0, -1, 0), (0, 1, 0), (1, 0, 0), (-1, 0, 0), (0, 0, 1), (0, 0, -1)] q = collections.deque() for i in range(H): for j in range(N): for k in range(M): if board[i][j][k] == 1: q.append([i, j, k, 0]) while q: x, y, z, cnt = q.popleft() for a, b, c in near.. 더보기
[baekjoon] 7576. 토마토 코드 import collections N, M = map(int, input().split()) board = [list(map(int, input().split())) for _ in range(M)] near = [(0, -1), (0, 1), (1, 0), (-1, 0)] q = collections.deque() # 그냥 q로하니까 시간초과 떠서 deque로 수정 for i in range(M): for j in range(N): if board[i][j] == 1: q.append((i, j, 0)) board[i][j] = 2 while q: x, y, cnt = q.popleft() for a, b in near: xi, yi = x + a, y + b if 0 q = collection... 더보기
[programmers] 크레인 인형뽑기 게임 https://programmers.co.kr/learn/courses/30/lessons/64061 코딩테스트 연습 - 크레인 인형뽑기 게임 [[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4 programmers.co.kr 로직 설명 1. board가 가로로 맨 윗줄부터 나와있는것이기 때문에 세로로 돌린다 board = [ [0,0,0,4,3], [0,0,2,2,5]. [0,1,5,4,1], [0,0,0,4,3], [0,3,1,2,1] ] 2. for i in moves: moves 돌면서 해당 board[i-1]중에 0이 아닌 첫번째값이 나오면 result 리스트에 추가하고 0으로 바꿈 - 이때, boar.. 더보기