[파이썬 심화] 3. 프로그램은 표현식과 문장을 평가해 실행된다
◎ Python/파이썬 심화 (책)2022. 8. 23. 22:04[파이썬 심화] 3. 프로그램은 표현식과 문장을 평가해 실행된다

프로그램을 작성하면 컴퓨터는 작성된 표현식과 문장을 실행하고 계산된 결과를 변수에 저장해 프로그램을 실행한다. 이는 표현식과 문장을 평가해서 처리하는 것과 같다. 즉시 실행해 결과 출력하기 표현식이나 문장을 바로 계산해서 결과를 반환하거나 내부에 바로 사용할 수 있게 구성하는 것을 탐욕스러운 평가(greedy evaluation) 또는 엄격 평가(eager evaluation)라고 한다. 연속적 변수 할당 연속적인 변수 할당과 변수 참조는 다음과 같이 실행된다. a = b = c = d = 5 print(a + b + c + d) print(a.__add__(b).__add__(c).__add__(d)) [결과] 20 20 이처럼 연산자를 연속해서 사용하면 내부적으로 스페셜 메소드를 연속으로 실행해 처리..

[파이썬 심화] 2. 파이썬의 모든 값은 객체(object)다
◎ Python/파이썬 심화 (책)2022. 8. 22. 21:24[파이썬 심화] 2. 파이썬의 모든 값은 객체(object)다

파이썬에서 변수는 값을 할당할 때 만들어진다. 변수에 할당되는 모든 값은 객체이다. 객체를 간단하게 숫자, 문자열 등을 리터럴 표기법으로 작성할 수도 있다. 또한 클래스를 사용해서도 생성할 수 있다. 리터럴 표기법은 객체를 직접 만든다 텍스트를 작성하는 방식을 리터럴 표기법이라고 하는데, 이런 표기법으로 작성해도 내부에서는 각각 자료형에 맞는 객체로 저장한다. 우선 상수와 리터럴의 차이를 알아야 한다. 두 용어를 혼동해서 쓰는 사람이 제법 있다. 상수(constant)란? 상수는 변하지 않는 변수를 의미한다. 즉 상수는 숫자나 문자와 같은 데이터가 될 수도 있지만 클래스같은 객체나 구조체도 넣을 수 있다. 주의할 점은 참조 변수를 상수로 지정할 때 상수니까 데이터가 변하지 않겠지? 라고 생각할 수도 있지..

[파이썬 심화] 1. 변수에 관한 고찰
◎ Python/파이썬 심화 (책)2022. 8. 21. 17:54[파이썬 심화] 1. 변수에 관한 고찰

문법에 사용하는 예약어(keyword)의 종류 예약어 관리 모듈은 keyword다. 이 모듈을 import하고 모듈 내 변수 kwlist를 조회하면 예약어의 종류를 알 수 있다. print(keyword.kwlist) [결과] ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', '..

[백준 / BOJ] 9184번 신나는 함수 실행 (C++, Python)
◎ 자료구조와 알고리즘/백준(BOJ) 문제풀이2022. 8. 12. 20:37[백준 / BOJ] 9184번 신나는 함수 실행 (C++, Python)

링크 : https://www.acmicpc.net/problem/9184 9184번: 신나는 함수 실행 입력은 세 정수 a, b, c로 이루어져 있으며, 한 줄에 하나씩 주어진다. 입력의 마지막은 -1 -1 -1로 나타내며, 세 정수가 모두 -1인 경우는 입력의 마지막을 제외하면 없다. www.acmicpc.net 문제 문제 풀이 문제에 적혀있는 재귀함수 w(a, b, c)를 동적 계획법으로 옮기면 된다. 핵심 부분만 언급하자면 기저 사례인 1, w(20, 20, 20)을 리턴하는 코드 밑에 // C++의 경우 else if (dp[a][b][c] != 0) return dp[a][b][c]; # Python의 경우 elif dp[a][b][c] != 0: return dp[a][b][c] 해당 코드를..

[백준 / BOJ] 24416번 알고리즘 수업 - 피보나치 수 1 (C++, Python)
◎ 자료구조와 알고리즘/백준(BOJ) 문제풀이2022. 8. 11. 22:50[백준 / BOJ] 24416번 알고리즘 수업 - 피보나치 수 1 (C++, Python)

링크 : https://www.acmicpc.net/problem/24416 24416번: 알고리즘 수업 - 피보나치 수 1 오늘도 서준이는 동적 프로그래밍 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자. 오늘은 n의 피보나치 수를 재귀호출과 동적 프로그래밍 www.acmicpc.net 문제 문제 풀이 fib(n) { if (n = 1 or n = 2) then return 1; # 코드1 else return (fib(n - 1) + fib(n - 2)); } 코드 1은 return 1이다. 그런데 잘 생각해보면 이 피보나치 함수는 1의 합으로 피보나치 수를 구하게 된다. 어차피 숫자는 1밖에 없기 때문에 바로 알아챌 수 있다. 그렇다면 코드 1은 n의 ..

[백준 / BOJ] 2580번 스도쿠 (C++, Python)
◎ 자료구조와 알고리즘/백준(BOJ) 문제풀이2022. 8. 7. 14:56[백준 / BOJ] 2580번 스도쿠 (C++, Python)

링크 : https://www.acmicpc.net/problem/2580 2580번: 스도쿠 스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루 www.acmicpc.net 문제 문제 풀이 우선 스도쿠의 규칙에 따르면 체크해야 할 조건이 두 가지가 있다. 같은 행, 열에 같은 숫자가 존재하면 안된다. 속해있는 3x3 정사각형 안에 같은 숫자가 존재하면 안된다. C++ 상세 풀이 더보기 다양한 풀이가 있겠지만 나는 백트래킹 방법, 그 중에서도 9 x 9칸을 해결할 때까지 순회하는 방법을 사용했다. for (int i = 0; i < 9; ++i) for (in..

[백준 / BOJ] 14889번 스타트와 링크 (C++, Python)
◎ 자료구조와 알고리즘/백준(BOJ) 문제풀이2022. 8. 7. 14:31[백준 / BOJ] 14889번 스타트와 링크 (C++, Python)

링크 : https://www.acmicpc.net/problem/14889 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net 문제 문제 풀이 백트래킹 문제이며, 우선 팀을 반으로 어떻게 나눌까? 하는 생각에서 출발하게 된다. C++ 상세 풀이 더보기 2차원 벡터에 행렬을 담아주었다. N이 4에서 20까지이므로 visited 배열을 크기 20으로 설정해 전역으로 선언해두었다. C++ 코드 void dfs(std::vector &v, int cur, int idx) { // cur이 N / 2와 같다면 한 팀에 총 인원의 반이 담겨졌다..

[백준 / BOJ] 14888번 연산자 끼워넣기 (C++, Python)
◎ 자료구조와 알고리즘/백준(BOJ) 문제풀이2022. 8. 6. 15:34[백준 / BOJ] 14888번 연산자 끼워넣기 (C++, Python)

링크 : https://www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net 문제 문제 풀이 우선 나는 문제 접근을 하나씩 다 해보는건 어떨까? 하는 생각에서 시작했다. 연산자의 우선순위는 생각하지 않는다고 했으니 첫번째부터 차근차근 사칙연산을 하면 성공할 것 같다고 생각했다. C++ 상세 풀이 더보기 원래 전역변수를 남발하는 것은 좋지 않다고 배워서 쓰지 않으려고 노력했는데, 항상 백트래킹 문제를 풀다 보면..

[백준 / BOJ] 9663번 N-Queen (C++, Python)
◎ 자료구조와 알고리즘/백준(BOJ) 문제풀이2022. 8. 5. 21:11[백준 / BOJ] 9663번 N-Queen (C++, Python)

링크 : https://www.acmicpc.net/problem/9663 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. www.acmicpc.net 문제 문제 풀이 유명한 백트래킹 문제다. 옛날에 알고리즘을 공부할 때 접해본 적이 있어 빨리 풀었지만, 아마 처음 접했다면 시간을 엄청 오래 썼을 것 같다. 우선 N-Queen 게임에 대한 이해가 필요하다. 퀸의 특성상 체스판 한 행에 한 개의 퀸만 존재할 수 있다. 서로 다른 퀸은 대각선상에 존재할 수 없다. 한 행씩 퀸을 배치하면서 총 배치 횟수가 N이 된다면 모두 배치를 성공했다는 뜻이므로 해당 변..

[VS Code] VS Code에서 터미널을 Git bash로 사용할 때 한글이 깨질 시
● 이것저것 설정 강좌2022. 7. 31. 15:33[VS Code] VS Code에서 터미널을 Git bash로 사용할 때 한글이 깨질 시

앞선 강좌와 유사한 부분을 다룹니다. https://reo91004.tistory.com/126 [VS Code] VS Code 터미널에서 한글 깨짐 현상이 발생 시 앞선 강좌에서 이어집니다. https://reo91004.tistory.com/2 [VS Code] VS Code로 C/C++, Python 개발환경 구축하기 (컴파일, 빌드까지) 1. VS code를 설치한다. (계속 다음 누르면 됩니다.) https://code.visuals.. reo91004.tistory.com 설정 -> 오른쪽 위 JSON 아이콘 클릭 아래 사진처럼 조금 내리다 보면 있는 code-runner.executorMap 부분에서 cpp 앞부분에 chcp.com 65001 && 을 추가해주세요. (Code runner가 ..

[VS Code] VS Code에서 디버깅 시 STL 헤더파일 진입 방지하기
● 이것저것 설정 강좌2022. 7. 31. 15:26[VS Code] VS Code에서 디버깅 시 STL 헤더파일 진입 방지하기

C++로 코딩을 하다 보면 vector 같은 STL을 자주 사용합니다. 디버깅을 할 때 중단점을 설정하고 F11 (Step into)로 진행하면 아래 사진처럼 STL의 정의가 담긴 헤더파일까지 진입할 때가 많습니다. 몇 번 더 F11을 누르면 빠져나오긴 하지만 들어가는 것 자체가 불편한 분들에게 유용한 설정입니다. vscode -> launch.json 파일에서 아래 코드블럭처럼 setupCommands 항목을 바꿔주세요. 아래 사진과 똑같으면 됩니다. "setupCommands": [ { // 디버깅을 한번이라도 해보셨으면 이 3줄은 이미 있을 겁니다. "description": "gdb에 자동 서식 지정 사용", "text": "-enable-pretty-printing", "ignoreFailure..

[백준 / BOJ] 15652번 N과 M (4) (C++, Python)
◎ 자료구조와 알고리즘/백준(BOJ) 문제풀이2022. 7. 31. 13:33[백준 / BOJ] 15652번 N과 M (4) (C++, Python)

링크 : https://www.acmicpc.net/problem/15652 15652번: N과 M (4) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 문제 문제 풀이 앞선 문제들(N과 M (1), N과 M (2), N과 M(3))과 같은 맥락을 공유하는 문제다. 특히 N과 M(3)과 아주 유사하다. C++ 상세 풀이 더보기 전 문제와 유사하게 해당 문제는 굳이 visited를 사용할 필요가 없다. 비내림차순으로 출력하면 된다고 했으니, C++의 경우는 간단하게 이전 숫자와의 크기를 비교하도록 조건문을 하나 추가해준다. if (v[va..

image