#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
bool check[30][30];
int n, arr[30][30],num[1010],cnt;
int dx[4] = { 0,0,-1,1 };
int dy[4] = { 1,-1,0,0 };
void dfs(int x,int y) {
check[x][y] = true;
num[cnt]++;
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (0 <= nx && nx < n && 0 <= ny && ny < n) {
if (!check[nx][ny] &&arr[nx][ny]) dfs(nx, ny);
}
}
}
int main() {
scanf(" %d", &n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf(" %1d", &arr[i][j]);
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (!check[i][j] && arr[i][j]) dfs(i, j), cnt++;
}
}
printf("%d\n", cnt);
sort(num, num + cnt);
for (int i = 0; i < cnt; i++) printf("%d\n", num[i]);
}
view raw 2667.cpp hosted with ❤ by GitHub

문제 :

https://www.acmicpc.net/problem/2667

 

'문제풀이 > 백준' 카테고리의 다른 글

1012 - 유기농 배추  (0) 2022.04.23
11399 - ATM  (0) 2022.04.23
11047 - 동전 0  (0) 2022.04.23
1034 - 램프  (0) 2022.04.17
1027 - 고층 건물  (0) 2022.04.17
#include <iostream>
#include <string>
using namespace std;
int coin[10 + 1];
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int kind, total;
cin >> kind >> total;
for (int i = 1; i <= kind; i++) {
cin >> coin[i];
}
int sum = 0, cnt = 0;
for (int i = kind; i >= 1; i--) {
while (sum < total) {
sum += coin[i];
cnt++;
}
if (sum == total) {
cout << cnt;
return 0;
} else {
sum -= coin[i];
cnt--;
}
}
return 0;
}
view raw 11047.cpp hosted with ❤ by GitHub
 

'문제풀이 > 백준' 카테고리의 다른 글

11399 - ATM  (0) 2022.04.23
2667 - 단지 번호 붙이기  (0) 2022.04.23
1034 - 램프  (0) 2022.04.17
1027 - 고층 건물  (0) 2022.04.17
1260 - DFS와 BFS  (0) 2021.09.11

 git을 이용해 작업을 하다보며 현재 브랜치를 종종 깜빡하는 경우가 있습니다. 그럴때마다 git branch 명령어를 입력하기는 좀 귀찮죠. 이것은 쉘에 branch를 출력하면 아주 편하게 해결할 수 있습니다.

 

아래와 같이 진행합니다.

 

1. vi ~/.bashrc

2. 가장 아래에 아래 입력합니다.

# Show git branch name
force_color_prompt=yes
color_prompt=yes
parse_git_branch() {
 git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
if [ "$color_prompt" = yes ]; then
 PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\]\$ '
else
 PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(parse_git_branch)\$ '
fi
unset color_prompt force_color_prompt

3. source ~/.bashrc

 

그럼 아래와 같은 사진을 확인할 수 있습니다.

참고 : https://blog.seoft.co.kr/24

 

ubuntu 터미널 현 디렉토리 우측에 git branch 출력

[문제정의] 다음과같이 ubuntu 터미널 현 디렉토리 우측에 git current branch 출력하기 위함 [해결방안] 0. 작업 환경 ubuntu16.04기준 (18.04도 확인완료) mobaXterm client로 테스트 1. ~/.bashrc 파일의 가장..

blog.seoft.co.kr

 

N, M = list(map(int, input().split()))
table = []
for _ in range(N):
table.append(input())
K = int(input())
max_cnt = 0
for col in range(N):
zero_cnt = 0
for i in table[col]:
if '0' == i:
zero_cnt += 1
col_light_cnt = 0
if zero_cnt <= K and zero_cnt % 2 == K % 2:
for col2 in range(N):
if table[col] == table[col2]:
col_light_cnt += 1
max_cnt = max(max_cnt, col_light_cnt)
print(max_cnt)
# 출처 : https://yhkim4504.tistory.com/11
view raw 1034.py hosted with ❤ by GitHub

문제 :

https://www.acmicpc.net/problem/1034

 

1034번: 램프

첫째 줄에 N과 M이 주어진다. N은 행의 개수이고, M은 열의 개수이다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 램프의 상태가 주어진다. 1이 켜져있는 상태이고, 0이 꺼져

www.acmicpc.net

 

 

'문제풀이 > 백준' 카테고리의 다른 글

2667 - 단지 번호 붙이기  (0) 2022.04.23
11047 - 동전 0  (0) 2022.04.23
1027 - 고층 건물  (0) 2022.04.17
1260 - DFS와 BFS  (0) 2021.09.11
12865 - 평범한 배낭  (0) 2021.09.11

 

N = int(input())
buildings = list(map(int, input().split()))
def caculate_gradient(x1, y1, x2, y2):
gradient = (y2 - y1) / (x2 - x1)
return gradient
def retrieve_right(standard_x_idx):
current_idx = standard_x_idx + 1
max_gradient = None
see_able = 0
while current_idx <= N - 1:
ret = caculate_gradient(standard_x_idx, buildings[standard_x_idx],
current_idx, buildings[current_idx])
if None == max_gradient or max_gradient < ret:
see_able += 1
max_gradient = ret
current_idx += 1
return see_able
def retrieve_left(standard_x_idx):
current_idx = standard_x_idx - 1
min_gradient = None
see_able = 0
while current_idx >= 0:
ret = caculate_gradient(standard_x_idx, buildings[standard_x_idx],
current_idx, buildings[current_idx])
if None == min_gradient or min_gradient > ret:
see_able += 1
min_gradient = ret
current_idx -= 1
return see_able
max_see_able = 0
for i in range(N):
ret = retrieve_left(i) + retrieve_right(i)
if max_see_able < ret:
max_see_able = ret
print(max_see_able)
view raw 1027.py hosted with ❤ by GitHub

문제 : 

https://www.acmicpc.net/problem/1027

 

1027번: 고층 건물

세준시에는 고층 빌딩이 많다. 세준시의 서민 김지민은 가장 많은 고층 빌딩이 보이는 고층 빌딩을 찾으려고 한다. 빌딩은 총 N개가 있는데, 빌딩은 선분으로 나타낸다. i번째 빌딩 (1부터 시작)

www.acmicpc.net

특정 건물에서 볼 수 있는 다른 건물들의 수를 세면 됩니다.

만약 입력이 10번째 건물까지 있는 상태입니다.

예시로 5번째 건물에서는 1 ~ 4번째 건물 중 몇개가 보이는지와 6~10번째 건물 중 몇 개가 보이는지를 각각 구한 후 이 둘을 합하면 됩니다. (5번째 건물에서 올려다본다는 마인드입니다.)

'문제풀이 > 백준' 카테고리의 다른 글

11047 - 동전 0  (0) 2022.04.23
1034 - 램프  (0) 2022.04.17
1260 - DFS와 BFS  (0) 2021.09.11
12865 - 평범한 배낭  (0) 2021.09.11
2606 - 바이러스  (0) 2021.09.11

부팅 시퀀스 과정은 쉽게 설명하면 다음의 경우에 이뤄집니다.

  • 디바이스에 전원을 인가할때
  • 리셋 버튼 누를 때

두 가지 모두 부팅이 이루어지기 때문에 하나의 설명으로도 충분합니다.

우선 우리가 디바이스를 구동시키기 위한 소스코드가 어디에 저장되는지 알아야합니다.

코드는 Flash 영역에 저장됩니다. 0x0800 0000 - 0x080F FFFF 영역인데요, 바이너리가 이 영역을 벗어날 정도로 크면 안되겠죠.

그리고 vector table을 알아야 합니다. vector table은 exception과 interrupt service routine 어드레스를 가지고 있습니다.

cortex-m4의 vector table은 아래와 같습니다.

그림에서 0x0000 0000은 비어있는데 이것은 초기 Stack Pointer 값을 가지고 있기 때문입니다. 그리고 0x0000 0004는 reset handler의 주소를 가지고 있습니다. 만일 리셋 버튼을 누르거나 전원을 공급한다면 아래 절차가 수행됩니다.

  1. PC(program counter)는 0x0000 0000으로 로드됩니다. 즉 현재 프로세스의 흐름은 0x0000 0000입니다.
  2. 0x0000 0000이 Stack pointer 값을 가진 후, MSP(main stack pointer)로 fetch됩니다. 그러면 fetch된 값이 스택의 entry 주소입니다.
  3. 그리고 PC는 Reset handler의 주소를 가지게 됩니다.

이 3단계는 하드웨어에 의해서 행해집니다. 그리고 이것은 하드웨어 아키텍처에 따라 조금씩 상이하다는것을 의미합니다.

위 3단계가 끝나면 reset handler는 아래 절차를 수행합니다.

  1. 시스템을 초기화
  2. 초기화된 global variable, static variable(.data)를 SRAM에 copy합니다.
  3. 초기화되지않은 data(.bss)를 SRAM에 copy하고 0으로 초기화합니다.
  4. 그리고 소스코드상의 main()을 호출합니다.

 

 

 

 

'STM32F4 계열 레퍼런스' 카테고리의 다른 글

Memory map  (0) 2022.03.03

프로세서의 메모리 모델은 다음과 같습니다.

메모리 맵

우선은 Code 영역을 분석하겠습니다.(한꺼번에 포스팅하기에는 내용이 넘 많은것같네요 ㅜ.)

code region은 아래와 같이 설명하고 있습니다.

Instruction fetches are performed over the ICode bus. Data accesses are performed over the DCode bus.

그리고 code region의 디테일은 아래와 같습니다.

디테일

  • Flash : 프로그래머가 작성할 코드는 이 영역에 저장됩니다. Flash의 사이즈 또한 offset을 이용해 확인할 수 있습니다.
  • System memory + OTP : 일단 system memory은 ROM입니다. ROM에는 bootloader라고 불리우는 프로그램이 저장돼 있습니다. bootloader는 각각의 vendor(TI, ST 등등)들이 chip을 생산할때 자체적으로 제작해서 집어넣습니다.
    또한 0x1fff 0000 ~ 0x1fff ffff는 bootloader를 위해서 예약된 ROM region입니다.

    The boot loader is located in system memory. It is used to reprogram the Flash memory by using USART1 (PA9/PA10), USART3 (PC10/PC11 or PB10/PB11), CAN2 (PB5/PB13), USB OTG FS in Device mode (PA11/PA12) through DFU (device firmware upgrade).

'STM32F4 계열 레퍼런스' 카테고리의 다른 글

부팅 시퀀스  (0) 2022.03.13

 본 블로그는 개인 메모용으로 이용하고 있습니다. 따라서 틀린 내용이 자주 등장할 수 있습니다. 

 틀린 내용이 확인된다면 지적 부탁드립니다. 한 편으로 보시는분들에게 조금이나마 도움이 됐으면 합니다.

'내 낙서장' 카테고리의 다른 글

직업 관련 공부  (0) 2022.09.09
수행해 온 일 (??) 정리  (0) 2022.05.26
할 일  (0) 2021.12.06
재미있는 것과 재미없는 것, 그리고 주제 파악.  (0) 2021.09.12

+ Recent posts