18일차 TIL : 백준 2단계 / 프로그래머스 옹알이(1) / GIT

변시윤·2022년 11월 17일
0

내일배움캠프 4기

목록 보기
18/131

학습내용

백준 2단계

  • 1330 - 두 수 비교하기
  • 9498 - 시험 성적
  • 2753 - 윤년

프로그래머스 0단계

  • 옹알이(1)

협업을 위한 GIT 활용 1주차

Firebase

백준

2단계 - 조건문

2753 : 윤년

문제
연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오.
윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다.
예를 들어, 2012년은 4의 배수이면서 100의 배수가 아니라서 윤년이다. 1900년은 100의 배수이고 400의 배수는 아니기 때문에 윤년이 아니다. 하지만, 2000년은 400의 배수이기 때문에 윤년이다.

입력
첫째 줄에 연도가 주어진다. 연도는 1보다 크거나 같고, 4000보다 작거나 같은 자연수이다.

출력
첫째 줄에 윤년이면 1, 아니면 0을 출력한다.

제출 답안

year = int(input())

if year % 4 == 0:
    if year % 100 != 0 or year % 400 == 0:
        print(1)
else:
    print(0)

정답

year = int(input())

if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
    print(1)
else:
    print(0)

❶ 4의 배수일 때
❷ 100의 배수가 아니거나 400의 배수일 때

일단은 독해를 잘못했다. 조건을 이렇게 두 가지로 생각했는데

❶4의 배수이면서 100의 배수가 아닐 때
❷400의 배수일 때

이게 맞는 조건이다.

하지만 조건을 알맞게 나누더라도 이중조건문을 쓰면 ❶의 조건을 충족하는 것들 중에서 다시 ❷를 충족해야만 1을 출력하는 로직이기 때문에 틀린 답이다. 문제가 요구하는 것은 ❶과 ❷ 중에서 하나만 충족해도 1을 출력하는 거니까.

즉, 이중조건문을 쓰지 않고 논리연산자를 사용해서 모두 하나의 조건문으로 설정하면 되는 문제다.



프로그래머스

옹알이(1)

문제
머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.

제한사항
1 ≤ babbling의 길이 ≤ 100
1 ≤ babbling[i]의 길이 ≤ 15
babbling의 원소에서 "aya", "ye", "woo", "ma"는 각각 최대 한 번씩만 등장합니다.
문자열은 알파벳 소문자로만 이루어져 있습니다.

제출 답안 및 정답

from itertools import permutations

def solution(babbling):
    words = ["aya", "ye", "woo", "ma"]
    joinWords = []
    count = 0

	# 발음 가능한 단어들의 조합
    for i in range(1, 4):
        for j in permutations(words, i):
            joinWords.append("".join(j))

	# 발음 가능한 단어의 갯수
    for i in babbling:
        if i in joinWords:
            count += 1
    
    return count
  1. 발음 가능한 단어들을 words에 배열로 할당
  2. 발음 가능한 단어들의 조합 구하기
    • words의 길이만큼 반복문 돌리기
    • permutations 함수를 사용해서 words의 경우의 수 구하기
    • join 함수로 경우의 수 결과들을 하나의 단어로 조합하기
    • 조합한 단어들을 빈 배열 joinWords에 할당하기
  3. 발음 가능한 단어의 갯수 구하기
    • babbling을 반복문으로 돌리기
    • 반복문으로 돌린 값이 joinWords 안에 해당되면 count 1씩 누적

팀원분들이 반복문이랑 다른 함수 사용해서 풀이하는 방법 설명해줬는데 이해가 잘 안돼서 다른 방법은 없을까 하다가 얻어 걸린 방법이다. 덕분에 permutations이라는 아주 유용한 함수를 알게 됐다!

  • itertools
    파이썬의 내장 라이브러리로 자신의 반복자(유사한 자료구조를 순회하는 객체)를 만드는 모듈. permutations(), combinations(), product(), combinations_with_replacement() 등의 함수가 포함된다.
  • permutations(a,b)
    a에서 b개의 원소 갯수를 조합한 순열을 구하기. b를 지정하지 않거나 r=None으로 설정시 최대길이의 순열을 반환한다.
from itertools import permutations

array = ['a', 'b', 'c']
for i in permutations(array, 2):
    print(i)

('a', 'b')
('a', 'c')
('b', 'a')
('b', 'c')
('c', 'a')
('c', 'b')    



협업을 위한 GIT 활용

스스로 답해보기

  • 버전관리를 한다는 건 어떤 의미일끼?
  • 작업내역 단위인 commit에는 어떤 정보가 포함되어야 버전관리를 잘할 수 있을까?
  • 지금까지 어떤 순서로 실습했나?

명령어로만 알고있던 내용을 시각화한 프로그램으로 다시 배우니까 구조가 한 눈에 들어와서 동작 원리를 훨씬 이해하기가 쉬웠다. 특히 add와 commit은 몇 번이나 헷갈리고 실수했었던 부분인데 이번에 완벽하게 이해했다. 이래서 사람들이 소스트리, 소스트리 했던 거군... VSCode에서도 비슷한 프로그램이 있다고 들었는데 소스트리에 익숙해지면 VSCode에서 관리하는 방법도 익혀봐야겠다.



Firebase 특강도 들었는데 강의 내용을 당장 몇 시간 내로 정리할 수가 없어서 내가 이해한 바를 한 줄로 적어본다. Firebase로 배포하기 위해선 CRUD 작업이 필요한데 그게 무진장 어렵다. Firebase에 관한 내용 자체는 예전에 한 번 공부했던 내용이라 어렵진 않았는데 CRUD를 구현하는 부분에서 자바스크립트 폭격을 당해서 어질어질했다.... 그것도 막상 코드 하나하나 뜯어보면 그렇게 어려운 코드는 아닐 것 같은데 여러 기능이 있고 그 내용을 한 번에 다 접하다 보니 막막하게 느껴지는 것 같다. 그리고 리액트에서는 리덕스로 관리하는 방법으로 배웠기 때문에 더 복잡해보이는 것 같기도 하다.

강의만 주구장창 들을 때는 프로젝트만을 기다렸는데 오늘 특강 듣고 살짝 막막해졌다.. 그래도 뭐... 하다 보면 어떻게든 되겠지... 개인 프로젝트 만들 때도 다 그랬으니까ㅎ... 일단 모르면 팀원들이랑 튜터님한테 직접 물어볼 수도 있고 혼자서 할 때보단 상황이 훨씬 나으니까 쫄려도 힘내봐야겠다. 이번 기회에 자바스크립트 기초를 확실히 다지고 가야지🔥🔥🔥

profile
개그우먼(개발을 그은성으로 하는 우먼)

2개의 댓글

comment-user-thumbnail
2022년 11월 18일

든든한 튜터님이 계시니 걱정마세요! 화이팅입니다!

1개의 답글