#알고리즘 Q.11 : 하샤드 수

📌문제 설명:
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.

📖입출력 예:
x return
10 true
11 true
12 false
13 false

 

 

 

풀이

🔸풀이1 해설
이전 코드카타에서 자릿수 구할 때 적용했던 식을 사용하여 문제를 품.
정수를 문자열로 변환한 후(자릿수 단위로 끊기 위해), 각각의 문자를 다시 숫자로 반환하여 합산 함.
자릿수를 더한 값은 a 변수로 받고, x에서 a를 나누어 떨어지면 true가 출력됨.

🔸풀이2 해설 (중요도 🌟🌟🌟)

마찬가지로 이전 코드카타에서 사용했던 재귀함수를 사용하였는데, 재귀함수에서 변환된 값을 받을 변수 설정이 필요하기 때문에 두 개의 함수를 만들어준다.

digit_sum(n): n의 모든 자릿수의 합을 구하는 함수

solution(x): x를 n의 값을 나누어 떨어지는지 출력하는 함수 (하샤드)

digit 함수에서 나온 값을 a 변수로 받아 풀이 1과 동일하게 출력된다.

 

 


 

 

 

🤷‍♀️후기 : (깨달음 💡*10)

 

이번 문제는 사실 풀이법 2번에서 막혀서 풀지 못했다가 튜터님의 도움으로 풀게 되었다.

처음에 풀이2번을 오른쪽 사진과 같이 풀었었는데,

이렇게 풀게 될 경우 건1에서 반환한 a의 값을 받아주는 변수가 없기 때문에 조건2에서 완벽한 정답이 나오지 않는다.

 

🌟즉, 위의 풀이법 2번처럼 조건1과 조건2가 연계될 경우에는,

조건1의 함수 정의, 조건2 함수를 각각 정의하여,

조건2 함수에다가 조건 1의 함수를 삽입하여 조건1에서 반환된 변숫값으로 입력되게 해야 한다.

🍅문자열_인덱싱과 슬라이싱

📌인덱싱
💡파이썬은 숫자를 0부터 세기 때문에, f[1] = b 가 출력된다.

 

 

📌슬라이싱

💡숫자를 지정하여 문자 열의 일부를 잘라낼 때 사용한다.
💡f[:]의 값을 복사하는 것과 동

 

🍅리스트와 딕셔너리

 

📌리스트 : 순서가 있는, 다른 자료형들의 모임

리스트의 길이는 len()함수로 구할 수 있음

💡리스트 만들 때,

  • a = [ ]
  • b = list()
리스트 인덱싱

순서가 있기 때문에, 문자열처럼 인덱싱과 슬라이싱 사용 가능
💡 a[-1]은 리스트의 맨 마지막을 출력함

리스트 슬라이싱

💡 리스트 중첩사용: 리스트의 안에 또 리스트가 있고 그 값을 출력하려면, a[2][0] 이렇게 사용한다


📖 덧붙이기


📖 정렬하기

+) 정렬할 때 "sort.()"를 사용하여 오름차순으로 정렬한다. 이때, 역순(내림차순)으로 정렬하고 싶다면, ".sort(reverse=True)" 사용

📖 요소가 리스트 안에 있는지 확인( in 사용)


 

📌딕셔너리 : 키(key)와 밸류(value)의 쌍으로 이루어진 자료 모임

💡 딕셔너리 만들 때,                      #리스트와 딕셔너리의 괄호 구분할 것

  • a = { }
  • a = dict()
📖 딕셔너리는 순서가 없기 때문에, 인덱싱 사용불가

📖 새로운 값 넣기
📖 딕셔너리 안에 해당하는 값 찾기( in 사용)
📖 딕셔너리와 리스트를 사용하여, 자료 정리할 때 사용(중요도🌟🌟)

 

📌 Linux/Unix 명령어

💡) code . : 현재 위치의 파일 열기  +) "." 점 한 개는 현재 위치, ".." 점 두개는 상위 위치

📌 로컬에서 git 버전관리 순서

< 💡 순서 💡 >
- 처음 파일 생성 ▶ Untracked 상태 (git으로부터 추척/감시를 받지 않는 파일)
- git add <file> ▶ Staged 상태 (git이 버전관리를 시작함)
- git commit <file> ▶ Stage에 올라가있는 파일들이 하나의 commit으로 만들어짐
- 이때부터는(git add를 실행하고 난 이후부터),  ▶ Unmodified 상태로 감 (처음 Untracked 상태로 가지 않음)
- 파일에 수정사항이 생기면 ▶ Modified 상태
- 다시 git add, git commit을 사용하여 다른 버전의 commit을 만든다. (first commit, second commit ...)


💡git commit을 하면, stage area에 있는 모든 파일들이 하나의 commit으로 만들어진다.

💡git rm --cached <file> : git add로 stage에 있는 파일을 unstage 할 때 (다시 원래대로)


📌 github에 push하기 (중요도🌟🌟🌟)

[방법1] 로컬에서 git init 사용하여 push 하기 (협업X, 개인적으로 github 사용할 때)
git push -u → "-u"가 아래의 "--set-upstream"과 같음

처음 폴더 생성하고 해당 작업을 해주는 것이 좋음

💡git log
로컬에 몇 개의 commit이 있는지 알려줌

💡git push --set-upstream origin master    

 

📖 [요약] 📖

  1. 로컬 저장소를 만든다(Git init)
  2. 원격 저장소를 만든다(github repo 생성)
  3. 로컬 저장소에서 원격 저장소를 셋팅한다.
  4. git push

[방법2]  git clone (remote 세팅이 이미 완료됨)

1. github 레포 생성 / 기존 레포 가능
2. git clone <remote_repository>(=url)

📌 gitignore (git에 공유하면 안되는 파일)  (중요도🌟🌟🌟🌟)

password.txt 파일을 .gitignore에 입력하면 git에 push 되지 않음

💡 gitignore 생성한 후 "git add . " 사용하면 gitignore에 입력한 파일 제외하고 모두 git push

💡 이미 git add된 파일 gitignore에 입력해도 git에서 버전관리하고 있음... (이미 정보를 가지고 있음)
      즉, gitignore은 repo 형성하자마자 미리 igonore에 입력해야 됨.

🌝참고 링크)
gitignore에 넣을 소스 (window. mac os, python 등등 굳이 git에 공유할 필요 없는 파일 소스 생성해줌)
https://www.toptal.com/developers/gitignore/

 

📖 [요약] 📖

  1. 새로운 repo 생성
  2. ".gitignore' 폴더 생성
  3. 위의 참고 링크 활용하여 파일 소스 다 넣는
  4. git status 로 항상 확인하기

'특강' 카테고리의 다른 글

웹 심화 이해  (0) 2024.08.14
웹 기본 이해  (0) 2024.08.12
기술면접_CS, SQL 내용정리  (0) 2024.08.08
CS 특강(소프트웨어 설계)  (0) 2024.07.26
CS 특강(컴퓨터 구조와 운영체계)  (0) 2024.07.25

📕자료구조 및 알고리즘 (1-1~1-7)

 

.isalpha() : 알파벳인지 확인

string.ascii_lowercase : A~Z까지 알파벳순으로 소문자로 나열됨

ord : 문자(알파벳 대소문자) → 숫자로 바꿔줌.


점근 표기법 : 알고리즘의 성능을 수학적으로 표기, "효율성"을 따짐

  • 빅오 표기법
  • 빅오메가 표기법 (이건 거의 안 씀)

시간 복잡도란? 입력값과 문제를 해결하는 데 걸리는 시간과의 상관관계


💡

파이참 디버거 : 내가 원하는 부분만 실행할 때

숫자 앞에 중지 버튼 누르면 실행하지 않음

Run 누르지 말고 Debug 눌러서 실행

 

중요도: 🌟🌟🌟

stack : 처음 순서에서 반대의 순서로 꺼낸다. (Ctrl + Z 되돌리기 기능과 같음)
#push, pop, empty

스택에 들어가는 기본 단위

 

1. 내가 AI 트랙에 참여한 계기는 무엇인가요?

회사를 다니면서 필요한 앱이 있었는데, 아무리 찾아봐도 제가 원하는 앱이 없어, 차라리 직접 만들고 싶어 개발 분야에 대해 알아보게 되었습니다. 그리고 개발 쪽은 처음이라 하나씩 배워보고자 AI 트랙에 참여하게 되었습니다.

 

2. 내가 이해한 개발자는 어떤 역할을 하는 사람인가요?

사용자가 원하는 서비스를 만드는 것이라고 생각합니다. 또, 다양한 사용자들이 사용하는데 편리하고 감각적인 서비스를 제공하는 것이 중요하다고 생각합니다.

 

3. 개발을 경험해보셨나요? 해보셨다면 어떤 경험을 하셨는지를 작성해주시고, 아니라면 개발에 대해 찾아본 것을 작성해주세요.

개발 경험은 없습니다. 개발과는 전혀 다르지만, 회사에서 엑셀 수식을 생성하는 담당이었는데 원하는 내용을 찾기 쉽게, 업무를 빠르게 작업할 수 있도록 엑셀 또는 구글시트를 만들면서 이런 것들이 앱으로도 만들어지면 좋겠다고 생각했었습니다. 하지만 개발을 전문적으로 배워본 경험은 없습니다.

 

4. 개발자의 역할을 수행하는 데에 있어 나의 강점과 연관된 부분은 무엇이라고 생각하나요? 혹은 보완, 개선하고 싶은 개인 역량이 있나요 ?

  • 과거 혹은 현재의 업무와 연관 지어도 좋습니다. ‘능력’을 기준으로 고민해주세요.
컴퓨터에 대한 이해가 빠른 편이라고 생각합니다. 회사에서 엑셀 행정 업무를 담당하다보니 수식과 같은 복잡한 식을 외우면서 코딩과 관련된 복잡한 기호들도 빠르게 외울 수 있지 않을까 생각합니다. 하지만 파이썬과 같은 코딩을 사실 직접적으로 해본 적은 없다보니 이번 기회에 확실히 공부해보고 싶습니다.

 

5. 본 코스 수료 후, 어떤 개발자로 성장하고 싶나요?

제가 원하는 앱을 꼭 만들어보고 싶습니다. 또 사용자의 입장에서 편리하고 유용하게 쓰일 앱을 계속해서 만들어보고 싶습니다.

 

6. 그 외에 개발 트랙에 기대하는 것이 있다면 자유롭게 작성해 주세요.

제가 개발도 처음이고, 개인적인 사정으로 캠프를 늦게 참여하게 되어 많이 부족하다고 생각합니다. 하지만 최대한 열심히 참여하여 이 트랙을 완벽히 이해하고 싶습니다. 그래서 질문이 많을 수도 있고, 이해가 되지 못했을 경우 다음 전개로 이어가기 어려워하는 편이라 그 점을 이해해주시고 기다려주시면 좋겠습니다. 최대한 같이 공부하는 사람들과 비슷한 속도로 갈 수 있도록 저도 노력하겠습니다! 감사합니다!

+ Recent posts