💻 개인공부 💻 100

[Python] 파이썬 퀴즈게임 소스 (암산, 아재개그) (feat. random lib, for문)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 import random #랜덤함수를 사용하기 위한 라이브러리 import def question1():#아재재그 함수1 print("세상에서 가장 빠른 닭은?") answer=str(input()) if(answer=="후다닭"): #만약 정답이라면 정답이라고 출력 print("정답입니다") else: print("오답입니다") def question2(): print("소금이 깜작 놀라면?") answer=str(input()) #만약 정답이라면 정답이라고 출력 if(answer=="이럴슈가"): print("정답입니다") else: print("오답입니다.") ..

[Python] 학점 계산 프로그램 ( feat. def, if문, 입력함수 input)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #grade라는 함수 정의, score은 매개변수 def grade(score): if score>=90: grade= "A입니다" #만약 입력한 score이 90이 넘으면 a에 "A입니다"를 대입 elif score>=80: grade= "B입니다" elif score>=70: grade ="C입니다" elif score>=60: grade="D입니다" else : grade="F입니다" return grade #마지막으로 a를 return 해주면 함수 완성 score=int(input()) #오류의 원인! #score값은 함수에서 int형으로 취급이 되고 있으므로 input을 해주고 이를 int형으로 변환! p..

[백준 - 1920] 수 찾기(feat. 이진탐색 알고리즘) / C++

출처 => https://www.acmicpc.net/problem/1920 문제 문제 N개의 정수 A[1], A[2], …, A[N]이 주어져 있을 때, 이 안에 X라는 정수가 존재하는지 알아내는 프로그램을 작성하시오. 입력 첫째 줄에 자연수 N(1≤N≤100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1≤M≤100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다. 모든 정수의 범위는 -231 보다 크거나 같고 231보다 작다. 출력 M개의 줄에 답을 출력한다. 존재하면 1을, 존재하지 않으면 0을 출력한다. 사고의 흐름 ▶ 선형탐색을 통해 쉽게 구현할 수 있지만 그렇게 하게 되면..

[백준 - 2178] 미로 탐색 (feat. 너비우선탐색) / C++

출처 => https://www.acmicpc.net/problem/2178 문제 N×M크기의 배열로 표현되는 미로가 있다. 1 0 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 0 1 1 미로에서 1은 이동할 수 있는 칸을 나타내고, 0은 이동할 수 없는 칸을 나타낸다. 이러한 미로가 주어졌을 때, (1, 1)에서 출발하여 (N, M)의 위치로 이동할 때 지나야 하는 최소의 칸 수를 구하는 프로그램을 작성하시오. 한 칸에서 다른 칸으로 이동할 때, 서로 인접한 칸으로만 이동할 수 있다. 위의 예에서는 15칸을 지나야 (N, M)의 위치로 이동할 수 있다. 칸을 셀 때에는 시작 위치와 도착 위치도 포함한다. 입력 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. ..

[백준 - 2267] 단지번호붙이기 (feat. 깊이우선탐색) / C++

출처 => https://www.acmicpc.net/problem/2667 문제 사고의 흐름 ▶ 전형적인 깊이우선탐색 알고리즘을 이용한 문제이다. ▶ 크게 2가지의 포인트를 잡아야 한다. >> 첫 번째 포인트! 1이 발견되면 그 점을 중심으로 왼쪽 오른쪽 위 아래를 조사하는 것. ▶ 나의 풀이에서는 dx[]와 dy[] 배열을 이용하였다. 주위에 있는 x좌표와 y좌표를 nx와 ny로 설정하고 nx=x+dx[i] ny=y+dy[i]로 선언한다. i가 증가할 때마다 x와 y에 값을 더해준다. ▶ 여기서 중요한 것은 아래의 소스코드처럼 i번째의 숫자는 dx[i]와 dy[i]가 달라야 한다. 만약 0으로 같거나 1,-1로 둘이 같게 된다면 이동하지 않거나 대각선으로 이동하기 때문이다. dfs에서의 움직이는 방향..

[C++] 함수와 참조 (feat. &, 별명)

출처 => C++ How to Program (Detitel / Prenticehall) / 현재 그리고 미래지향적인 C++ 프로그래밍(장석우, 임정목 / 비앤씨에듀케이션)함수의 인자 전달 방식 ▶ 프로그래밍에서 함수를 사용할 때 변수, 즉 인자는 거의 필수 불가결하게 사용이 된다. 인자, 혹은 이 매개변수는 어떤 식으로 불러와서 사용이 되는걸까? 2가지의 방법이 있는데 값에 의한 호출과 주소에 의한 호출로 나뉘어진다. 값에 의한 호출로 객체 전달 ▶ 순서는 다음과 같다. 1. 함수를 호출하는 쪽에서 객체를 전달한다. 2. 함수의 매개 변수 객체 생성, 매개 변수 객체의 생성자는 호출되지 않는다.3. 함수 종료, 매개 변수 객체의 소멸자를 호출한다. ▶ 값에 의한 호출 시, 매개 변수 객체의 생성자는 실..

[C++] string 클래스 (feat. copy, getline, substr, find, replace)

출처 => C++ How to Program (Detitel / Prenticehall) / 현재 그리고 미래지향적인 C++ 프로그래밍(장석우, 임정목 / 비앤씨에듀케이션)string 클래스▶ C++에서 변수를 선언할 때 'c'는 char형으로, "string"은 string형을 자료형을 선언하여 준다. 여기서 "string"과 같은 자료형이 string인 변수들은 string클래스의 객체이다. ▶ 그렇다면 string클래스란 과연 무엇인가?#includeusing namespace std;▶ string 클래스는 헤더 파일에 선언을 하여 사용한다. ▶ 다양한 문자열 연산을 실행하는 연산자와 멤버 함수를 포함한다.▶ 문자열, 스트링, 문자열 객체, string 객체 등으로 혼용이 된다.▶ 문자열을 생성..

[C++] 예외 처리 (Exception)

출처 => C++ How to Program (Detitel / Prenticehall) / 현재 그리고 미래지향적인 C++ 프로그래밍(장석우, 임정목 / 비앤씨에듀케이션) 예외란 무엇인가? ▶ 프로그램을 실행 중, 오작동이나 결과에 영향을 미치는 예상치 못한 상황이 발생한다. 이런 사오항을 예외 발생이라고 하는데 이를 처리하는 코드를 예외 처리기라고 한다. ▶ 예를 들면 다음과 같은 상황이다. #include using namespace std; int getExp(int base, int exp) { int value = 1; for (int n = 0; n < exp; n++) { value = value * base; //거듭제곱. base를 exp번 곱한 값이 value } return valu..

[C++] 조작자를 이용한 구조체 객체들의 정보 출력 프로그램(feat. struct, setw(), switch)

1. 문제 2. 요구사항 1. Namecard의 구조체 작성(이름, 주소, 연락처) 2. 입력할 인원을 입력할 수 있어야 함 3. 입력한 인원들의 정보를 정렬해야 함 4. 이를 출력 5. 위의 요구사항들 + 종료를 실행할 수 있는 메뉴가 있어야 함 프로그램 설계도 소스 코드 #include//C++ #include//정렬을 위한 sort함수 헤더함수 #include//조작자 setw()을 사용하기 위한 헤더함수 using namespace std; struct namecard {//namecard객체 char name[30];//namecard의 이름 char address[30];//namecard의 주소 char tel[20];//namecard의 전화번호 }; int menu; //메뉴를 숫자로 할..

[C++] 제네릭 함수 (feat. template)

함수 중복의 약점과 제네릭 template //template: 템플릿을 선언하는 키워드 //class: 제네릭 타입을 선언하는 키워드 //T: 제네릭 타입 T 선언 void swap(T& a, T& b) { T tmp; tmp a; a = b; b = tmp; } ▶ 위의 소스 코드를 보자 template //template: 템플릿을 선언하는 키워드 //class: 제네릭 타입을 선언하는 키워드 //T: 제네릭 타입 T 선언 void swap(T& a, T& b) { T tmp; tmp a; a = b; b = tmp; } ▶ 둘다 동일한 코드에다가 동일한 이름이지만, 단순히 매개 변수만 달라(오버로딩) 중복하여 작성하였다. 이는 코드를 작성하는데 낭비가 될 수 있다. ▶ 이를 해결..