개요 while(1)과 while(2) 중 누가 더 빠를까? 당연히 같지 않나? 라는 생각이 들면서도 (variable == 0) 을 판별하려면 variable의 좌측 비트부터 하나씩 확인해보며 모두 0인지 확인해야 하는 것 처럼 while(0b000000000...01) 과 while(0b000000000...10) 이다 보니 좌측에서부터 비트가 0인지 확인하는 원리라면 while(2)가 더 빠를수도 있지 않을까? 싶었다. (while(1)보다 while(2)가 비트 "1"이 더 먼저 나오기 때문에 비교 연산 시 우위를 가져서) 하지만... 최근 C 컴파일러의 성능은 매우 뛰어나기 때문에 최적화로 인해 결국 같은 이진 코드를 가질 것 이라는 가설을 세우고 확인해보았다. 코드와 환경 Ubuntu 20.0..
링크 https://school.programmers.co.kr/learn/courses/30/lessons/118670 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 분류 연결 리스트(linked list) 개인적 난이도 매우 쉬움 쉬움 보통 어려움 매우 어려움 핵심 알고리즘 연결 리스트를 사용하되... rotate 를 처리하기 위해 좌측 열과 우측 열의 경우 별도의 linked list로 관리 나머지는 각 row들을 linked list로 만들고, 이 row들을 또 linked list로 만듦 linked list만 떠올릴 수 있다면 쉬운 문제. 아래..
링크 https://school.programmers.co.kr/learn/courses/30/lessons/118669 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 분류 길찾기 (다익스트라 등) 완전 탐색 개인적 난이도 매우 쉬움 쉬움 보통 어려움 매우 어려움 핵심 알고리즘 출발지에서 봉우리까지 가는 경로만 찾으면 됨. 봉우리에서 다시 원 출발지로 돌아오는 과정은 생각할 필요가 없음 (어쩌피 intensity가 같을 것이기 때문) 그 외에는 길찾기 알고리즘들을 변형시켜서 사용하거나 그래프 탐색(완전 탐색) 알고리즘 사용하면 됨 시행착오 처음엔 각 St..
링크 https://school.programmers.co.kr/learn/courses/30/lessons/118668 분류 완전탐색 개인적 난이도 매우 쉬움 쉬움 보통 어려움 매우 어려움 핵심 알고리즘 알고리즘 공부를 하는것과 코딩 공부를 하는것 역시 problem 인 것 처럼 처리하면 코드 길이를 줄일 수 있음. 각각 [0, 0, 1, 0, 1], [0, 0, 0, 1, 1] 과 같음. 모든 problem을 풀기 위해 필요한 알고력 코딩력을 먼저 구한 다음 현재 내 상태에서 풀 수 있는 문제를 풀었을 때 바뀐 상태들을 큐에 넣어가면서 원하는 알고력과 코딩력을 가질 때 까지 반복함. 공부시간(cost)를 기준으로 정렬된 큐(priority queue)를 사용해야 시간 초과 나지 않음 시행착오 알고력 ..
링크 https://school.programmers.co.kr/learn/courses/30/lessons/118667 분류 큐 그리디 개인적 난이도 매우 쉬움 쉬움 보통 어려움 매우 어려움 핵심 알고리즘 그리디 알고리즘을 사용해야함을 떠올릴 수 있다면 매우 쉬운 문제. 문제에 큐에서 꺼낸 값은 "다른 큐"에 넣는다고 명시되어 있으므로 수의 합이 작은 큐에서 큰 큐로 원소를 넣어가며 합이 같을 때 까지 계산하면 됨. 큐에서 꺼낸 값을 두 큐중 아무곳에나 넣는다고 했으면 난이도가 올라갔을텐데.. 다행 두 큐의 최대 길이가 각각 30만 이므로 60만번 시행 후에도 큐 합이 같지 않다면 -1 리턴 (원래 두 큐 중 하나의 원소가 한번 이상 모두 꺼내졌을 때 -1을 리턴해야 하지만~ 코딩테스트니까 빠르고 간결..
링크 https://school.programmers.co.kr/learn/courses/30/lessons/118666 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 분류 문자열 다루기 기초 프로그래밍 개인적 난이도 매우 쉬움 쉬움 보통 어려움 매우 어려움 핵심 알고리즘 없음 시행착오 주어진 입력을 가지고 각 성격 유형에 대해 점수를 계산함 예를들어 RT형의 경우 R형 T형 점수를 각각 구한 뒤 비교하면 됨. 하지만 굳이 그렇게 할 필요 없이 R형일경우 가산하고 T형일경우 감산하여 최종 결과의 부호 판단을 통해 결과 도출 가능 코드 import java..
int countBits(unsigned int x) { unsigned int y = x - ((x >> 1) & 033333333333) - ((x >> 2) & 011111111111); return ((y + (y >> 3)) & 030707070707) % 63; } 긴 상수들은 앞에 0이 붙어있으므로 8진수이다. 어지럽다....... 반환문을 아래와 같이 고쳐서 mod연산보다 속도가 빠른 비트연산을 사용할 수도 있다. int countBits(unsigned int x) { unsigned int y = x - ((x >> 1) & 033333333333) - ((x >> 2) & 011111111111); y = ((y + (y >> 3)) & 030707070707); return ((y ..