본문 바로가기

전체 글

(386)
프로그래머스 - 로또의 최고 순위와 최저 순위(C++) 예외처리를 잘 해줘야하는 문제. 어려운 문제는 아니지만 예외처리가 어렵다. #include #include using namespace std; vector solution(vector lottos, vector win_nums) { vector answer; int numberArray[47] = {0,}; for(int i = 0; i < 6; i++) numberArray[win_nums[i]]++; int win = 0; int zero = 0; int wrong = 0; for(int i = 0; i < 6; i++){ if(numberArray[lottos[i]] != 0) win++; else wrong++; if(lottos[i] == 0) zero++; } if(wrong == 6){ i..
프로그래머스 - [1차] 다트 게임 문자열을 받아 처리하는 문제, 생각흐름은 다음과 같다. 1. 반드시 숫자, 알파뱃(S, D, T) 특수문자(*, #) 순으로 들어온다. 2. 바뀌는 건 숫자이다. 그러므로 숫자만 벡터에 추가해둔다. 3. 알파뱃이 들어오면 추가해둔 벡터의 숫자를 바꿔준다. 이때 인덱스 관리를 잘 해줘야한다. 난 지금 벡터 사이즈 - 1로 두었다. 4. 특수문자는 들어올 때도 있고 안들어올 때도 있다. 들어오면 이전 문자와 지금 문자를 처리해준다. 5. 예외처리로 10이 들어오면 1, 0 으로 확인되기 때문에 버그가 발생한다. 이때는 1이 들어오면 뒤의 문자가 0인지 판단하고 벡터에 10을 추가하는 예외 로직을 만들었다. 다른 사람들 풀이를 보니 sstream 을 사용하여 간단히 푼 사람도 있었고 regex? 을 사용한 사..
[git 오류]Another git process seems to be running in this repository, 잘 사용하던 깃이 갑자기 푸쉬가 안될 경우이다. Another git process seems to be running in this repository, e.g. an editor opened by 'git commit'. Please make sure all processes are terminated then try again. If it still fails, a git process may have crashed in this repository earlier: remove the file manually to continue. 일반적으로 두개의 깃 명령어가 실행된 경우이다. 나는 그런 적 없는데 왜...? 어쨌든 Git Bash에 rm -f .git/index.lock 명령어를 실행시키면 해결.
백준 2805번 나무 자르기(C++) #include #include using namespace std; vector tree; int N, M; bool checkTree(int ch) { long long sum = 0; for (auto i : tree) { if (i - ch > 0) sum += i - ch; } if (sum >= M) return true; else return false; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL);cout.tie(NULL); cin >> N >> M; int max = 0; for (int i = 0; i > tmp; tree.push_back(tmp); if (max < tm..
C/C++ 포인터와 참조 : 화살표 -> 과 점 . 의 차이 C/C++에서 포인터를 쓰다보면 Ver.a()라고 쓰려 하면 IDE가 Ver -> a()로 바꿔주는 경우가 있다. 신경쓰지 않을 수도 있지만 뭐가 다른걸까? 간단히 말하면 -> 는 간접 . 는 직접이라고 볼 수 있다. 아래 코드를 보자 #include using namespace std; class Rect { int width, height; public: Rect(int x, int y) : width(x), height(y) {} int area() { return width * height; } }; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL);cout.tie(NULL); Rect obj(3, 4); Rect* foo, * bar, ..
C++ : In-line function 이란 무엇인가 In-line fucntion이란 마치 C/C++의 매크로처럼 함수를 In-line 라인 안에 숨긴다는 뜻이다. 예를 들어 void add(int a, int b){ return a + b; } main(){ cout add -> 연산 -> 출력 순이다. 만약 inline을 쓰면? inline void add(int a, int b){ return a + b; } main(){ cout 연산 -> 출력 순이된다. 이미 컴파일러는 인라인함수 때문에 저 함수 자체를 알고 있는 상태이기 때문이다. 우리가 어떤 수학 공식을 알면 문제에서 바로 적용 가능하지만 그 공식의 이름만 안다면 책에서 찾아보고 써야하는 것과 같다. inline은 함수를 컴파일러에게 외우게 하는 것이다. 때문에 inline은 함수의 실행시간..
프로그래머스 - 점프와 순간이동 (C++) 처음엔 최소값을 구하는거고 백준에서 비슷한 워딩의 문제를 본 적이 있어서 BFS인 줄 알았다. 이 문제는 0에서 시작해서 걷거나 순간이동 두가지 조건이 있는것으로 보인다. 그러나 처음 몇 걸음을 걸어야할지 알수없다. 한발짝씩 가서 모든 조건을 새어보는 것은 불가능하다. 그러나 목적지 입장에서 생각해보면 이전의 수에서 x2 되었거나 +1 되었거나 둘중 하나이다. x2는 비용이 0이기 때문에 이왕이면 x2 를 많이 사용해야한다. 그러므로 n이 짝수이면 나누기2 홀수이면 빼기 1 하면서 0까지 얼마나 걸리나 계산하면 된다. #include using namespace std; int solution(int n) { int ans = 0; while(true){ if(n % 2 == 0){ n = n / 2; ..
OOP 기초 (왜 쓰는가?, 캡슐화 등) 1. 소프트웨어공학의 궁극적 목표는 최소한의 비용으로 소프트웨어의 개발, 유지보수를 하는 것이다. 2. 일반적으로 OOP는 프로그래머의 생산성, SW퀄리티, 생명주기, 가독성, 이해력을 증가시킨다. 3. 커플링은 모듈(컴포넌트)간의 의존성을 나타낸다. 일반적으로 커플링은 최소화 해야한다. 4. 응집도는 모듈 내부의 데이터들이 얼마나 하나의 목표를 위해 긴밀한가를 나타낸다. 응집도는 최대화 해야한다. 5. 추상 클래스는 최소 한개의 추상메소드를 포함해야한다. 6. 캡슐화란? 7. 캡슐화를 할때의 장점은 무엇인가? 8. 그냥 인스턴스를 사용할때와 포인터를 사용할 때의 차이는? 일반 인스턴스는 값의 복사값을 콜리에게 주기 때문에 데이터가 안전하다. 포인터를 사용할 경우는 본래의 값이 변경 될 수 있다.