본문 바로가기

Algorithm

(17)
[백준/27433/c++] 팩토리얼 2 https://www.acmicpc.net/problem/27433 27433번: 팩토리얼 2 0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오. www.acmicpc.net C++ 데이터 자료형의 크기와 범위 [참고 : https://sweetnew.tistory.com/16] 정수형 int 자료형은 4 byte = 2^32 bit (signed) int 의 범위는 -2,147,483,648~2,147,483,647 (대충 20억) unsigned int 의 범위는 0~4,294,967,295 (대충 43억) 정수형 long 자료형은 8 byte = 2^64 bit (signed) long 의 범위는 -9,223,372,036,854,775,808 ~ 9,223,37..
[프로그래머스/python] 외계어 사전 문제 해결 방법은 크게 2가지로 생각이 됐다 spell의 dict를 만들어서 dic와 비교하기 -> bad : 공간 낭비 발생 -> good : 알고리즘이 단순하다 dict의 원소 하나하나를 가지고 spell에 있는 걸로 만들 수 있는지 검사하기 spell 에 담긴 알파벳을 한번씩만 모두 사용한 단어를 모은 spell_dict 만들기 -> good : 연산횟수를 줄일 수 있다(필요한 연산만 가능 & dic의 앞쪽에 원하는 값이 있으면 프로그램 종료 가능) -> bad : 코드가 조금 복잡해보인다 나는 방법2를 택했다. def solution(spell, dic): answer = 2 # spell이 사용된 횟수 확인용 리스트 check = [] char = '' # 연산 횟수 줄이기 1) dic의 문자열..
[C/perfect C] 프로젝트 Part 1-05 : 십진수를 이진수, 8진수, 16진수로 변환 1. 8진수와 16진수를 각각 직접 변환하여 출력하는 모듈을 만들어야하는 부분이 쉽지 않았다. 최대한 다른 모듈을 쓰지 않고 기본연산자만으로 구하려고 했지만 도저히 문제풀이가 떠오르지 않아서 그냥 제곱구하는 pow() 함수만 갖다 쓰기로 했다. -> 여기서 질문, c언어라서 최대한 저수준으로 짜보려고 해서 다른 라이브러리나 함수를 가져다 쓰지 않고자 한 것인데 이런 식으로 일종의 고집(?!)을 부리는 것이 과연 장기적으로 나의 프로그래밍 실력에 도움이 될까? 다른 언어(python, javascript, java 등)은 다른 라이브러리를 최대한 잘 활용하느냐가 실력의 척도라고 볼 수 있지 않나?? (1) 8진수 구하는 모듈 저기저 pow(10, count++)이 제멋대로 값이 나온다 이거 어떻게 해결하냐..
[C/perfect C] 프로젝트 Part 1-04 : 소수로 삼각형 만들기 1. 소수 출력하는 함수 2. 삼각형 만드는 반복문 이 두 가지를 잘 섞어서 만들어야겠다 생각함. 1번은 많이 해봐서 괜찮았는데 갑자기 2번 하려니까 여기서 의외로 시간을 많이 잡아먹었다. 예엣날에 백준 별찍기를 어떻게 했었지..?부터 시작해가지구 생각을 거슬러 오르다가 겨우 생각해냈다. 에휴 #define TRUE 1 #define FALSE 0 #include int isPrimeNum(int n); int main(void){ int countNum = 2; //삼각형 출력 for(int i=1; i
[C/Perfect C] 프로젝트 Part 1-03 : 두 정수 교환의 다양한 방법 1. 연산 방법을 안내하는 메시지 함수 만들기 2. 각 연산 방법마다 함수 만들어주기 -> 총 4개 3. 연산 번호 입력 받고 연산 결과 출력 1. 2처럼 함수를 작성하려고 한 이유는 코드를 깔끔하게 보기 위해서이다. 하지만 그렇게 하면 문제가 발생한다. 함수는 여러 값을 입력받을 순 있지만 단 하나만 리턴 하기 때문에 (여기서는 아직 포인터를 배우기 전이라 포인터를 사용하지 않고 풀려고 함) 함수를 사용할 수 없다 -> 그냥 main 함수 안에다가 switch문을 이용하여 각 case 안에다가 각각의 연산을 입력하기로 했다. 2. switch 문 안에서 변수 선언 하려고 했는데 빨간줄이 뜬다. -> 잇츠 오케이..라고 하는데 repl.it에서는 오류 떠서 그냥 밖에다가 선언 해줬다. 암튼 그래도 참고한..
[C/Perfect C] 프로젝트 Part 1-02 : 비트 연산 & | ^ ~ 오늘도 printf() 막노동을 했다 출력 결과 화면이 아주 멋드러지고 예쁘게 보였으면 해서 줄바꿈(\n)과 개행(\t)을 남발했더니 코드는 아주 더러워졌다. 그리고 오늘의 고민.. #1. [출력] 해야 하는 4가지의 숫자들을 어떻게 적당히 함수를 정의하고 호출해서 main 함수에는 최대한 간결하고 이해하기 쉬운 것들로만 표현할 수 있을까..? 오늘 나는 이 고민의 답을 찾지 못해서.. 그냥 막 노가다했다 그래서 오늘도 코드가 100줄을 넘었다. 슬프다. #2. 10진수를 2진수로 변환하는 저 비트연산을 이해하지 못했다. 교재에 나와 있는 '정수 x의 이진수 출력 모듈'을 고대로 갖다 쓰기만 했다. 이거 이해 못해도 되는건가? 모든 걸 이해할 필요가 없나? 그냥 가져다 쓸 줄 알기만 하면 되는건가? 여기..
[C/Perfect C] 프로젝트 Part 1-01 : 다양한 길이의 변환 구하기 1. message 함수 선언 및 출력 2. 메뉴 번호 2개 입력 받기 3. while(true) 반복문 - [변환할 단위] 숫자 입력 받기 - [변환할 단위]가 0이면 프로그램 종료 - 입력받았던 메뉴를 switch 중첩문으로 case 분류하여 출력하기 #define _CRT_SECURE_NO_WARNINGS #include void message(void); int main(void) { message(); int fromMenu = 0, toMenu = 0; float inputNum = 1; printf("[이전단위] --> [변환단위], 두 개의 메뉴 번호를 선택하세요. >> "); scanf("%d %d",&fromMenu, &toMenu); printf("\n\n"); while(1){ pr..
[C/백준]2525번 #define _CRT_SECURE_NO_WARNINGS #include int main(void) { int A,B,C; int totalMin; scanf("%d %d",&A,&B); // 현재 시각 A시 B분 입력받기 if(A23||B59){ printf("현재 시각 입력이 잘못되었습니다."); return 0; }//입력조건 확인 scanf("%d",&C); // 요리하는데 필요한 시간 C 입력받기 if(C1000){ printf("요리하는데 필요한 시간 입력이 잘못되었습니다."); return 0; } //입력조건 확인 // 계산 totalMin = A*60+B+C; if(totalMin>=1440) totalMin-=1440; A=totalMin/60; B=totalMin%60; // 출력 p..