[백준][파이썬]** 16917번 - 양념 반 후라이드 반


문제 번호 : 16917
문제 출처 : https://www.acmicpc.net/problem/16917

 

16917번: 양념 반 후라이드 반

현진 치킨에서 판매하는 치킨은 양념 치킨, 후라이드 치킨, 반반 치킨으로 총 세 종류이다. 반반 치킨은 절반은 양념 치킨, 절반은 후라이드 치킨으로 이루어져있다. 양념 치킨 한 마리의 가격은

www.acmicpc.net

 



Code

a, b, c, x, y = map(int, input().split())

result = a * x + b * y

if a + b > 2 * c:
    more = a if x >= y else b   # more : 더 많이 시켜야하는 치킨 종류의 가격
    if c * 2 < more:
        result = c * 2 * max(x, y)
    else:
        result = c * 2 * min(x, y) + more * (max(x,y) - min(x,y))
print(result)

Idea

  1. 초기 결과 값은 후라이드와 양념을 모두 따로 시키는 방법으로 설정
  2. 반반 두 마리를 시켜서 후라이드 한 마리, 양념 한 마리를 만드는 방식이 더 싼 경우를 고려
  3. 더 많이 시켜야 하는 치킨 종류의 가격이 반반의 가격보다 비싸면 모두 반반으로 구매
  4. 그렇지 않은 경우 더 적은 갯수 까지는 반반으로 시키고 이후에는 한 마리 씩 구매

[백준][파이썬]** 16968번 - 차량 번호판 1


문제 번호 : 16968
문제 출처 : https://www.acmicpc.net/problem/16968

 

16968번: 차량 번호판 1

00부터 99까지 총 100가지 중에서 00, 11, 22, 33, 44, 55, 66, 77, 88, 99가 불가능하다.

www.acmicpc.net



Code

s = input()

if s[0] == 'd':
    result = 10
    state = 1
else:
    result = 26
    state = 0

for ch in s[1:]:
    if ch == 'd':
        result *= (10 - state)
        state = 1
    else:
        result *= (26 + state -1)
        state = 0

print(result)

Idea

  1. 입력을 받을 때 문자를 그대로 사용하기 위해서 따로 list형으로 변환하지 않음
  2. 입력의 첫 번째 문자가 d인지 c인지에 따라서 state라는 flag를 설정
  3. 두 번째 문자부터 확인하면서 상황에 맞게 가능한 갯수를 계산하여 곱 연산
  4. 상황에 맞게 state도 변경시켜준다.

이 포스팅은 K.N.King의 C programming : a modern approach를 참고하여 만들었습니다.

  C 언어의 유래

C언어는 Bell Lab의 Ken Thompson, Dennis Ritchie 등이 만들었다.

당시의 다른 운영체제들 처럼, UNIX도 어셈블리어로 제작됨

어셈블리어로 제작된 프로그램들은 디버깅과 성능 업그레이드가 힘들어서 고급 언어가 필요했고 B언어를 만들었다.

B언어는 PDP-11이라는 컴퓨터에 잘 맞지 않았고 조금 더 발전된 New B(NB)를 만들었는데 B와는 형태가 많이 달라서 C언어라고 부르게 되었다.

1973년이 되자 UNIX전체를 C로 프로그래밍 했고 당시 C의 가장 큰 장점은 확장성이었다.

 


 C 기반 언어들

C++ 은 C의 특징을 많이 가지고 있는 언어이다.

Java는 C++을 베이스로 만든 언어이기 때문에 C의 특징을 많이 물려받았다.

C# 은 C++과 Java를 본 떠 만들었다.

이러한 언어들을 배울 때 C의 특징을 알면 조금 더 이해하기 쉽다는 장점이 있다.


 C의 특징과 장단점

C언어의 본 용도는 운쳥체제나 시스템 소프트웨어를 제작하는 것이다. C는 Low level language이다.

운영체제처럼 시스템을 제어하는 언어들은 바이트 단위와 메모리 주소 값 등의 기계 수준의 개념까지 다룰 수 있어야 한다.

대부분의 다른 언어에서는 직접 제어하지 않고 미리 짜인 알고리즘에 의해 작동한다.

C로 짠 프로그램들은 매우 빨라질 수 있다.

C는 작은 언어. 다른 언어들에 비해 매우 한정된 특징들을 제공한다. C언어는 표준 함수들로 이뤄진 라이브러리에 매우 크게 의존한다.

C는 관대한 언어이다. C는 다른 언어들에 비해 좀 더 큰 자유를 선사한다. 에러가 발생했을 때 구체적으로 무엇이 일어났는지에 대해 알려주지 않는다.

 장점

1. 효율성 - 어셈블리어를 대체하기 위해 만들어 졌기 때문에 한정된 메모리 내에서 빠르다.

2. 확장성 - 다양한 컴퓨터에서 프로그램이 실행 가능하다. 규격화 되어있다.

3. 강력함 - 다양한 자료형들과 연산자들은 C를 강력한 언어로 만들어 주었다.

4. 유연성 - 시스템 프로그램을 위해 만들어졌지만 임베디드 시스템이나 데이터 처리등 여러 응용프로그램을 제작하는데 사용된다. 다른 언어에서는 허용되지 않는 기능이 C 언어에서는 대부분 허용된다.

표준 라이브러리

UNIX와의 통합 - UNIX의 기능들은 사용자가 C를 할 줄 안다는 전제하에 제공되기도 한다.

 

단점

에러가 쉽게 난다.

실행하기 전까진 에러가 있는지 없는지 모른다. 

이해하기 어려울 수 있다.

수정하기 어려울 수 있다. 다른언어들은 클래스나 패키지로 잘게 나누어서 관리가 용이한데 C는 그런 기능이 없다.

6001. Hello 출력하기 

 

print('Hello')
print("Hello")

# 출력
# Hello

두 문장 모두 Hello가 출력 된다.

파이썬의 인터프리터에서는 ' 와 " 차이를 두지 않는다.

문자를 표현할 때 ' 를 사용하고 문자열을 표현할 때에는 " 를 사용하는 것이 보편적이다.

 


6002. Hello World 출력하기
# 1
print("Hello World")
# 2
print("Hello", "World")
# 3
print("Hello", end = ' ')
print("World")

# 출력
# Hello World

print()에서 반점( , ) 으로 구분하는 경우에는 자동으로 사이에 공백이 추가된다. 공백 외에 다른 문자를 넣고 싶은 경우 sep = '*' 과 같은 형태로 써주면 된다.

print()를 하게 되면 파이썬에서는 default로 개행을 하게 된다. 줄바꿈을 하기 싫다면 위와 같이 end = ' '로 작은 따옴표 사이에 넣고 싶은 문자를 넣으면 된다.


6003. Hello World 개행해서 출력하기
# 1
print("Hello")
print("World")
# 2
print("Hello\nWorld")
# 3
print("Hello", "World", sep = '\n')
# 4
print("""Hello
World
""")

# 출력
# Hello
# World

print()는 자동으로 줄바꿈을 한다.

4번에서 사용한 방법은 "docstring"이라 한다. 가장 직관적이고 가독성이 좋지만 소스코드가 길어지는 단점이 있다.

""" 와 """사이에 원하는 형태로 문자열을 넣으면 입력한 형태 그대로 출력이 된다.


6004. 작은 따옴표 출력하기
# 1 
print("'Hello'")
# 2
print("\'Hello\'")
# 3
print('\'Hello\'')

# 출력
# 'Hello'

작은 따옴표( ' )를 출력하는 방법으로는 2가지가 있다.

하나는 큰 따옴표 안에 '를 포함시키는 것이고 다른 하나는 \를 사용해서 \' 로 표현하는 것이다.


6005. 큰 따옴표 출력하기
# 1
print('"Hello World"')
# 2
print("\"Hello World\"")
# 3
print('\"Hello World\"')

# 출력
# "Hello World"

큰 따옴표는 작은 따옴표와 반대로 작은 따옴표 안에 포함이 되면 출력이 가능하다. 혹은 작은 따옴표처럼 \문자를 사용하여 \"로 문자를 표현해주면 가능하다.

\는 역슬래쉬와 같으며 \를 사용하는 이스케이프 문자들은 나중에 따로 정리하겠다.


6006. 특수문자 출력하기
print("\"!@#$%^&*()\'")

# 출력
# "!@#$%^&*()'

작은 따옴표같은 경우에는 \를 붙이지 않았어도 됐지만 통일성을 위해 \를 표시했다.

한 문자열에 "와 '가 같이 있는 경우가 있기 때문에 모든 따옴표는 \와 함께 표현하는 것이 좋다.


6007. 파일 경로 출력하기
print("\"C:\\Download\\\'hello\'.py\"")

# 출력
# "C:\Download\'hello'.py"

역슬래쉬(\) 같은 경우에도 \\로 표현해야 문자 '\' 로 표현이 되기 때문에 \\를 사용해주는 것이 좋다.

\\로 표현하지 않아도 \가 출력되긴 한다.


6008. print("Hello\nWorld") 출력하기
print("\"Hello\\nWorld\"")

 

'프로그래밍 > CodeUp' 카테고리의 다른 글

[CodeUp] Python 기초 100제 - 6010~6020  (0) 2022.06.20
[CodeUp] Python 기초100제 - 6009  (0) 2021.09.13

+ Recent posts