본문 바로가기

문제풀이25

오픈 채팅방 [문제 설명] 실제 카카오톡 오픈 채팅창과같이 입장한 프로필과 이름을 변경한 프로필, 그리고 채팅창을 나간 프로필을 저장하여 그것을 시간 순으로 출력하면 되는 문제이다. [코드] def solution(record): answer = []; name = {} for friend in record: if (friend.split(' ')[0] == 'Enter') or (friend.split(' ')[0] == 'Change'): name[friend.split(' ')[1]] = friend.split(' ')[2] for friend in record: if friend.split(' ')[0] == 'Enter': answer.append(f"{name[friend.split(' ')[1]]}님이 .. 2021. 10. 26.
이진 변환 반복하기 [문제 설명] 입력으로 들어온 2진수의 0의 갯수를 세고 1로만 이루어진 문자열로 바꿔준 후, 1로 이루어진 문자열의 길이로 다시 2진수로 만들면서 반복되는 문제이다. 결과값으로는 몇회 반복하여 이진 변환을 하였는지, 또 반복하면서 0의 갯수가 몇개였는지 출력하면 해결이다. [코드] def solution(s): answer = []; count = 0; zcount = 0 while s != '1': count += 1 zcount += s.count('0') s = bin(s.count('1'))[2:] answer.append(count); answer.append(zcount) return answer [코드 설명] 본인은 먼저 최종 조건인 s가 '1'의 값이 될 때 까지 while문을 돌도록 하.. 2021. 10. 26.
1309번 동물원 문제풀이 동적 프로그래밍의 문제들을 풀어보면서 동적 프로그래밍 문제들은 어느 조건들을 만족하면 답을 도출하기 쉽다는 것을 알았다. 이문제에서도 한가지 조건이 있었다. N = 1 : 1 1개 N = 2 : 00 11 2개 N = 3 : 001 100 111 3개 N = 4: 0011 0000 1001 1100 1111 5개 인 것처럼 여기서 지금 값의 개수는 이전 값, 이전 값의 이전 값을 더하면 지금 값의 개수를 얻을 수 있다. 그리고 결과값으로 15746을 나누고 남은 나머지 값을 출력해야 한다. 그러나 최종값에서만 모듈러 연산을 해주게 되면 100만번까지 도는 코드에서 메모리 초과가 나기때문에 for문을 돌때 마다 15746을 나눈 나머지 값만 저장해서 최종값을 도출 한다. import sys N =.. 2021. 8. 27.
16568번 엔비스카의 영혼 문제풀이 기본적인 동적 프로그래밍 문제들과 크게 다르지 않다. 이 문제 또한 여러 조건들을 가지고 진행되게 되는데, 기다리기 a명 앞으로 가기 (앞에 최소 a명 있을 때) b명 앞으로 가기 (앞에 최소 b명 있을 때 이 3가지 조건들을 충족하면서 계산을 진행해야한다. 예를 들어서 N으로 값이 4가 들어오고 a와 b의 값이 1과 2라고 하면, for문으로 진행될때 i == 1일 경우에는 i에 a와 b의 값을 빼서 넘어 갈 수 없기 때문에 둘다 되는 경우가 없다. i == 2일 경우 i에 a와 b 값중 a의 값이 i-a-1의 식을 진행하여도 값이 0 이거나 이상의 값을 가지기 때문에 최소 시간으로 저장됨 i == 3일 경우 i에 a와 b의 값중 a도 조건이 가능해서 계산이 가능하지만 이왕이면 더 큰값으로 먼.. 2021. 8. 27.
반응형