반응형

브랜치 생성
git branch 브랜치명

브랜치 목록 확인
git branch

특정 브랜치로 이동
git switch 브랜치명
* checkout 명령어가 git 2.23버전부터 switch, restore로 분리

브랜치 생성과 동시에 이동하기
git switch -c 브랜치명
* 기존의 git checkout -b 브랜치명 대체

브랜치 삭제하기
git branch -d 삭제할 브랜치명
* 지울 브랜치에 다른 브랜치로 적용되지 않은 내용의 커밋이 있을 시에는 -D 옵션으로 강제 삭제한다
ex) git branch -D 브랜치명

 

git commit -am : add 와 commit을 동시에, 하지만  새로운 파일 생겼을땐 하지 않는다. 

 

반응형

N개의 문자열 데이터를 입력받아 앞에서 읽을 때나 뒤에서 읽을 때나 같은 경우(회문 문자열)
이면 YES를 출력하고 회문 문자열이 아니면 NO를 출력하는 프로그램을 작성한다.
단 회문을 검사할 때 대소문자를 구분하지 않습니다.

▣ 입력설명
첫 줄에 정수 N(1<=N<=20)이 주어지고, 그 다음 줄부터 N개의 단어가 입력된다.
각 단어의 길이는 100을 넘지 않는다.

▣ 출력설명
각 줄에 해당 문자열의 결과를 YES 또는 NO로 출력한다.

▣ 입력예제 1
5
level
moon
abcba
soon
gooG

▣ 출력예제 1
#1 YES
#2 NO
#3 YES
#4 NO
#5 YES


내 풀이

import sys
sys.stdin=open("input.txt", "rt")

n = int(input())
for i in range(n):
    a = list(input().lower())
    
    lenA = len(a) #리스트 길이
    count =0
    for j in range(lenA // 2 ):
        if a[j] == a[lenA-1-j]:
            continue
        else:
            count+=1
    if count ==0:
        print('#',i+1, ' YES')
    else:
        print('#',i+1, ' NO')

설명:
- 입력값 n의 크기 만큼 반복문을 돈다. 반복하면서 입력값 문자열 a를 소문자 형태로 바꾸고 리스트로 바꿔준다.
- lenA를 통해 리스트의 길이를 구해준다.
- 변수 count를 선언한다. 여기서 카운트란 앞 뒤 수가 다른 경우의 수를 말한다.
- 앞 뒤 숫자를 비교하기때문에 반복분은 리스트 길이의 절반, 즉 2로 나눈 몫 횟수로 돌려준다.
- 반복문을 돌며 j번째 인덱스 값과 리스트길이-1-j 의 인덱스 값을 비교해준다.
- 만약 앞, 뒤 값이 같으면 continue해서 다음 앞뒤를 비교해주고, 다르면 count에 1을 추가해준다.
- 결과적으로 count가 0이면 앞뒤가 모두 같으므로 YES를 0이 아니면 NO를 출력해준다.

다른 풀이

import sys
sys.stdin=open("input.txt", "rt")

n = int(input())
for i in range(n):
    s = input().upper()
    size = len(s)

    for j in range(size//2):
        if s[j] != s[-1-j]:                       
            print('#%d NO' %(i+1))
            break
        print('#%d YES' %(i+1))

설명
- 전반적으로 내 풀이와 크게 다르진 않다. 
- 다만 2중 for문을 돌때 인덱스 값 세팅을 다르게했다. ex) s[-1]: 뒤에서부터 첫번째 인덱스값
- 또 굳이 리스트로 만들지 않고 문자열의 인덱스 값으로 바로 비교를 했다. (코드수를 줄일 수 있어 더 경제적이다.)

반응형

1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게
임이 있다.


규칙(1) 같은 눈이 3개가 나오면 10,000원+(같은 눈)*1,000원의 상금을 받게 된다.
규칙(2) 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)*100원의 상금을 받게 된다.
규칙(3) 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)*100원의 상금을 받게 된다.

예를 들어, 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3*100으로 계산되어 1,300원을 받게 된
다. 또 3개의 눈이 2, 2, 2로 주어지면 10,000+2*1,000 으로 계산되어 12,000원을 받게 된다.
3개의 눈이 6, 2, 5로 주어지면 그 중 가장 큰 값이 6이므로 6*100으로 계산되어 600원을 상금
으로 받게 된다.

N 명이 주사위 게임에 참여하였을 때, 가장 많은 상금을 받은 사람의 상금을 출력하는 프로그램
을 작성하시오

▣ 입력설명
첫째 줄에는 참여하는 사람 수 N(2<=N<=1,000)이 주어지고 그 다음 줄부터 N개의 줄에 사람
들이 주사위를 던진 3개의 눈이 빈칸을 사이에 두고 각각 주어진다.

▣ 출력설명
첫째 줄에 가장 많은 상금을 받은 사람의 상금을 출력한다.

▣ 입력예제 1
3
3 3 6
2 2 2
6 2 5

▣ 출력예제 1
12000


내 풀이

import sys

n = int(input())

maxPrice = 0
price = 0

for _ in range(n):    
    a = list(map(int, input().split())) #주사위 눈 3개 가져오기  
    if a[0] == a[1] == a[2]:
        price = 10000 + a[0]*1000
    elif a[0] == a[1] != a[2]:
        price = 1000 + a[0]*100
    elif a[1] == a[2] != a[0]:
        price = 1000 + a[0]*100
    elif a[0] == a[2] != a[1]:
        price = 1000 + a[0]*100
    else:
        price = max(a)*100
        
    if price > maxPrice:
        maxPrice = price   
            
        
print(maxPrice)

 

다른 풀이

import sys
sys.stdin=open("input.txt", "rt")

n = int(input())
res=0
for i in range(n):
    tmp = input().split()
    tmp.sort() #문자열 오름차순
    a,b,c = map(int, tmp) 

    if a==b and b==c: #3개 모두 같을때
        money=10000+a*1000
    elif a==b or a==c: #2개가 같을때
        money=1000+(a*100)
    elif b==c: #2개가 같을때
        money=1000+(b*100)
    else:
        money=c*100 #다 다를때 - 가장 큰 c기준
    if money>res:
        res=money

print(res)

 

반응형

자연수 N이 입력되면 1부터 N까지의 소수의 개수를 출력하는 프로그램을 작성하세요.
만약 20이 입력되면 1부터 20까지의 소수는 2, 3, 5, 7, 11, 13, 17, 19로 총 8개입니다.
제한시간은 1초입니다.


▣ 입력설명
첫 줄에 자연수의 개수 N(2<=N<=200,000)이 주어집니다.

▣ 출력설명
첫 줄에 소수의 개수를 출력합니다.

▣ 입력예제 1
20

▣ 출력예제 1
8


내 풀이:

import sys
sys.stdin=open('H:/Study/CodingTest_Python/input.txt', 'rt')

n = int(input())
n_list = [0]*(n+1) #n_list[0] 에서 n_list[21] 까지 있는 리스트 생성 
cnt = 0

for i in range(2, n+1): #2에서 20까지
    if n_list[i] == 0: #n_list[2] 2가 0이면
        cnt += 1
        for j in range(i, n+1, i): #2의배수(n_list[2], [4], [6]...)
            n_list[j] = 1

print(cnt)

풀이 설명:
- n_list = [0]*(n+1) : n_list[0] 에서 n_list[n] 까지 있는 리스트 생성한다. 여기서 인덱스 값이 입력값 각각을 의미한다.
                          예를 들어, 입력값이 20이면 0에서 20까지의 리스트를 만든다고 생각하면 된다. 

- for i in range(2, n+1):  어차피 소수는 2부터니까 반복문을 2에서 입력값 까지 도는것으로 설정한다. 

- if n_list[i] == 0: 
        cnt += 1  : n_list[i]값이 0이면 카운트를 1씩 증가한다.
                       기본값을 0으로 설정했으므로 처음값인 n_list[2]는 카운트가된다.

- for j in range(i, n+1, i): 
            n_list[j] = 1  : i가 2라면 2의배수에 해당하는 인덱스는 모두 1이되고 3이라면
                              3의 배수에 해당하는 인덱스 모두 1이된다.

 

 

 

반응형

## K번째 큰 수

현수는 1부터 100사이의 자연수가 적힌 N장의 카드를 가지고 있습니다. 같은 숫자의 카드가
여러장 있을 수 있습니다. 현수는 이 중 3장을 뽑아 각 카드에 적힌 수를 합한 값을 기록하려
고 합니다. 3장을 뽑을 수 있는 모든 경우를 기록합니다. 기록한 값 중 K번째로 큰 수를 출력
하는 프로그램을 작성하세요.
만약 큰 수부터 만들어진 수가 25 25 23 23 22 20 19......이고 K값이 3이라면 K번째 큰 값
은 22입니다.

▣ 입력설명
첫 줄에 자연수 N(3<=N<=100)과 K(1<=K<=50) 입력되고, 그 다음 줄에 N개의 카드값이 입력
된다.

▣ 출력설명
첫 줄에 K번째 수를 출력합니다. K번째 수는 반드시 존재합니다.

▣ 입력예제 1
10 3
13 15 34 23 45 65 33 11 26 42

▣ 출력예제 1
143

============================================================================

풀이

N, K = map(int, input().split())
a = list(map(int, input().split()))

res =set()

for i in range(N):
    for j in range(i+1, N):
        for m in range(j+1, N):
            res.add(a[i]+a[j]+a[m])

#set()에는 sort가 없어서 다시 리스트로 변환한다.
res = list(res)
res.sort(reverse=True)
print(res[K-1])

참고 개념:
set() 함수
- set은 영어로 집합이라는 뜻, 중복되지 않은 원소를 얻고자 할때 사용
- set을 선언하고 그 안에 계속 추가하고 싶다면 .add()를 사용
  -> 반드시 하나의 숫자 혹은 글자, 문장 , 튜플만이 가능하다.

sort() vs sorted()

sort() 함수
는 리스트명.sort() 형식으로, "리스트형의 메소드" 이며 리스트 원본값을 직접 수정
sort()함수의 리턴값은 None
이므로 정렬된 값은 리턴되지 않는다.

sorted()함수는 sorted(리스트명) 형식으로 "내장 함수"이며 리스트 원본값은 그대로이고 정렬값을 반환

 

+ Recent posts