본문 바로가기

전체

(156)
[프로그래머스/Python] 완주하지 못한 선수(해쉬) 참가자들을 key값으로 등장횟수를 count해서 딕셔너리에 담아주는 Counter함수를 사용하자. 여기서 completion이 등장할 때마다 빼주면 마지막에 count=1인 놈이 혼자 남은 놈 import collections def solution(participant, completion): answer = '' dict_p = collections.Counter(participant) for i in completion: if i in dict_p: dict_p[i] -=1 for i in dict_p: if dict_p[i] == 1: answer = i return answer 더 짧게 풀 수 있네.. import collections def solution(participant, complet..
[프로그래머스/Python] 소수찾기(소수/순열/중복제거) from itertools import permutations def isPrime(num): if num < 2: return False for i in range(2,num): if num%i==0: return False return True def solution(numbers): answer = [] for k in range(1, len(numbers)+1): perlist = list(map(''.join, permutations(list(numbers), k))) for num in list(set(perlist)): if isPrime(int(num)): answer.append(int(num)) return len(set(answer))
[프로그래머스/Python] 전화번호 목록(효율성) 1) 부르트 포스 접두사가 같은게 하나라도 발생하면 False이므로 이것을 검사하여 걸리면 바로 break한다. def solution(phone_book): answer = True for i in range(len(phone_book)): for j in range(i+1, len(phone_book)): if phone_book[j].find(phone_book[i]) == 0 or phone_book[i].find(phone_book[j])== 0: answer=False break return answer 2) sort하면 for문을 한번만 거치고 짧은 거 기준으로만 비교하면 된다. def solution(phone_book): answer = True phone_book = sorted(pho..
[프로그래머스/C++] 가장 큰 수(정렬) 예외처리만 주의하자.. #include #include #include #include using namespace std; bool greater_str(string a, string b){ return a+b > b+a; } string solution(vector numbers) { string answer = ""; vector a; for(int i=0;i
[프로그래머스/C++] 이진 변환 반복하기(진법 변환) #include #include #include #include using namespace std; int delZero(string& next_s){ int cnt_zero=0; for(int i=0;i0){ int div = num/2; int mod = num%2; num = div; num_bin = to_string(mod) + num_bin; } return num_bin; } vector solution(string s) { vector answer; int sum_zero = 0; int cnt_trans = 0; while(1){ if(s == "1")break; int cnt_zero= delZero(s); s = dec2bin(s.size()-cnt_zero); sum_zero+=c..
[프로그래머스/C++] N진수 게임(진법 변환) 앞서 풀어본 문제들과 유사하다. #include #include using namespace std; string convert_num(int num, int n){ char code[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; string tmp = ""; while(num/n!=0){ tmp = code[num%n] + tmp; num = num/n; } tmp = code[num%n]+tmp; return tmp; } string solution(int n, int t, int m, int p) { string answer = ""; string tmp = ""; // 임시 배열 tmp에 t*m 정도의 숫자를 담는다...
[프로그래머스/C++] 다음 큰 숫자(진법 변환) bitset STL을 활용하면 간단하게 풀 수 있다. #include #include #include using namespace std; int binary_counter(int num){ return bitset(num).count(); } int solution(int n) { int answer = n+1; while(1){ if (binary_counter(n) == binary_counter(answer)) break; answer++; } return answer; }
[백준/C++] 11724번: 연결 요소의 개수 (DFS) 바이러스 문제와 동일 #include using namespace std; int map[1001][1001]; int visit[1001]; int N, M; int ans = 0; void dfs(int x) { visit[x] = 1; for (int i = 1; i > N >> M; for (int j = 0; j > x >> y; map[x][y] = 1; map[y][x] = 1; } for (int i = 1; i